-
데브코스 자율주행_TIL_23.09.19데브코스 자율주행 Perception/_TIL(Today I Learned) 2023. 9. 19. 22:05
오늘 배운 내용
1. C++
- 프로세스의 메모리 구조
- 스마트 포인터
2. STL
- 순차 컨테이너
- 배열 알고리즘
3. Linux
1. C++
프로세스 메모리 구조
변수의 타입에 따라 변수가 위치할 메모리 섹션이 결정된다.
- Heap: 배열, 객체
힙은 프로세스가 동작하며 동적으로 할당, 해제되는 메모리 섹션
OS에서 가용 메모리를 탐색, 파편화를 최소화 하도록 관리.
오브젝트 풀링이라는 최적화 기법을 사용.
(오브젝트 풀링: 힙 메모리 해제가 필요한 상황에서 바로 해제하지 않고 동일한 객체 타입이 다시 필요한 상황에서는 재활용하기 위해서 별도의 풀을 만들어서 관리하는 최적화 기법.)
- Stack: 내장 기본 타입의 변수
스택은 함수의 지역 변수, 파라미터 등이 위치하는 메모리 섹션
각 함수의 스택 프레임의 크기, 프레임 내의 지역변수 위치는 컴파일 타임에 결정
컴파일을 할 때, 길이 정보가 결정되지 않은 배열을 지역변수로 선언한다면, 스택 프레임의 크기를 임의로 더 크게 잡아서 메모리 관리 측면에서 낭비가 발생
이를 잘 활용하면 성능을 향상할 수 있다.
스마트 포인터
C++의 raw포인터를 보완하기 위해 C++11부터 스마트 포인터가 제공된다.
종류는 세가지로 구분된다.
- std::unique_ptr: 독점적 소유권을 갖는 포인터
- std::shared_ptr: 독점적 소유권을 갖지 않는 포인터
- std::weak_ptr: shared_ptr처럼 작동하되 대상을 잃을 수 있는 포인터
한번에 이해하기 쉽지 않은 내용이라 조금 더 공부하고 적용해볼 필요가 있다.
2. STL
순차컨테이너
항목들이 순서를 갖는 컨테이너.
vector는 동적 배열을, list는 양방향 연결 리스트를, deque은 양방향 큐를 구현한다.
각 컨테이너와 적절한 멤버 변수를 사용하면 알고리즘 문제를 효과적으로 풀 수 있다.
배열 알고리즘
STL의 제너릭 정렬 알고리즘은 순차 컨테이너와 배열에만 적용할 수 있다.
list와 forward_list는 컨테이너 내부 구조에 최적화되고 효율적인 정렬 기능이 있다.
vector, deque, array클래스나 배열에서 유용하게 사용 가능하다.
#include <algorithm> sort() // 정렬 merge() // 병합 nth_element() // n번째 아이템을 찾아줌 partition() // 조건에 따라 배치 random_shuffle() // 랜덤으로 항목을 배치 for_each() // 지정된 항목을 순환하며 특정 콜백 함수 실행
함수들을 잘 활용하고 다양한 활용법을 알고 있으면 알고리즘 문제를 쉽게 풀 수 있다.
이 외에도 도움이 되는 함수들이 많이 있으니 많이 공부하고 문제를 풀어봐야 한다.
3. Linux
리눅스를 가상머신에 설치하는 방법, 리눅스의 역사에 대해 알 수 있었다.
리눅스 가상머신 셋팅으로 조금 더 빠르게 사용할 수 있는 방법을 알려준다.
'TIL > _TIL(Today I Learned)' 카테고리의 다른 글
데브코스 자율주행_TIL_23.09.25 (0) 2023.09.26 데브코스 자율주행_TIL_23.09.22 (0) 2023.09.22 데브코스 자율주행_TIL_23.09.21 (0) 2023.09.21 데브코스 자율주행_TIL_23.09.20 (0) 2023.09.20 데브코스 자율주행_TIL_23.09.18 (0) 2023.09.18