C++ 프로그래밍에 대한 수업을 계속 진행했다. 추가적으로 ROS 환경을 구축하기 위해서는 우분투가 유리한데 우분투 설정과 우분투에 관련된 내용들을 진행했다. TIL에 정리는 C++ 내용만 정리한다.
CS를 배웠다면, 컴퓨터의 메모리 구조에 대해서 어느정도 이해하고 있을 것이다. 프로그램은 저장장치(SSD, HDD 등)에 저장되어 있다가, 실제로 프로그램을 실행할 때에는 RAM에 탑재되어 프로그램을 실행하게 된다. 이때 메모리보다 큰 용량의 프로그램을 실행하기 위해서 페이징 기법을 통해 메모리와 디스크의 내용을 교체하는 Context Switching 과정을 수행한다.
Context Switching 과정은 높은 오버헤드를 야기하므로, 페이징이 자주 발생하지 않도록 프로그램을 설계하는것은 효율 향상에 도움이 된다.
C와 C++을 학습할 때, 포인터에 대해서 학습을 한다. 포인터는 일반적인 변수와 달리 변수가 실제로 저장된 메모리의 주소값을 저장하는 변수이다. 일반 포인터는 데이터 복사 과정을 줄이기 때문에 프로그램을 효율적으로 만들 수 있지만, 잘못 사용하게 되면 큰 오류와 버그를 발생시킨다.
# 포인터의 일반적 사용법
int x = 10;
int *ptr = &x; // 변수 X의 주소를 ptr 포인터 변수에 저장
# 포인터의 오류
int[] nums;
malloc(nums, sizeof(nums), 0);
int *ptr = &nums[0]
delete[] nums; // nums를 반납 후에도 ptr은 동일한 주소를 가르킨다.
스마트 포인터는 C++11에서 도입된 기법으로, unique ptr, shared ptr, weak ptr 등이 존재한다. weak_ptr을 제외한 스마트 포인터는 가르키는 대상이 소멸되었을 때, 같이 소멸되는 포인터들이다.
# unique_ptr
unique_ptr<int> ptr(new int(5));
auto ptr2 = ptr; // unique_ptr을 하나 더 생성할 수 없음
# shared_ptr
shared_ptr<int> ptr(new int(5));
auto ptr2 = ptr;
# weak_ptr
weak_ptr<int> ptr(new int(5));
auto ptr2 = ptr.lock(); // 객체의 만료여부 확인(shared_ptr 또는 nullptr 반환)
어려웠던 점은 크게 없다. 다만, Raw 포인터를 평소에 자주 사용했기에, 스마트 포인터를 사용하는 연습을 좀 해봐야겠다.
아직은 궁금한 점은 없었다.
오늘은 면접으로 인해 실시간 강의를 참여하지 못해서 아쉬움이 남았다. 타 지역에서 면접을 봤기에 아침부터 저녁까지 돌아다녀야 했고, 수업에 성실하게 임하지 못했다. 지금의 TIL도 너무 늦게 작성했다. 최대한 빨리 공부해서 열심히 따라가야겠다.
📌 프로그래머스 데브코스 6기 자율주행 인지과정(Perception) 수강 내용을 바탕으로 정리한 TIL 입니다.
📅 Today: 2023. 9.19.