목록CS 및 기본기 (6)
코가손의 블로그
push_back 객채 삽입을 위해 임시 객체를 하나 생성한다음 그 객체를 복사하여 벡터에 삽입 삽입이 끝나면 임시 객체 파괴 잠깐 쓰고 버릴 메모리를 굳이 할당하여 불필요한 연산이 생긴다 emplace_back 가변인자 템플릿을 사용해서 삽입하려는 객체 자체를 생성할 수 있음 임시 객체를 만들 필요가 없다 누가 더 좋나? 상황에 따라 다르다 vector vector; vector.push_back({1, 0}); vector.emplace_back({1, 0}); // 불가능
Vector 연속적으로 메모리를 할당 reserve개념으로 메모리영역 선할당 정책(1.5배 ~ 2배의 메모리공간 할당)을 통해 요소를 추가할 때마다 new가 일어나지 않음 캐시 적중률이 높아서 속도가 빠르다 포인터++ 연산으로 요소에 접근할 수 있어서 랜덤 엑세스가 가능하다 capacity가 꽉 차면 전체 메모리 재할당이 일어난다 List 비연속적으로 메모리 할당 요소를 추가할 때마다 new 일어난다 노드 기반의 구조로 앞과 뒤의 요소를 가리키는 오버헤드가 필요하다 Vector의 임의접근이 불가함, Iterator를 통해 순차적으로 접근해서 요소를 찾아야 한다 캐시 적중률이 낮다 캐시 적중률 CPU의 연산에 필요할 때마다 메모리에서 데이터를 가져옴 근데 Main memory or RAM은 CPU보다 느려..
메모리 영역 프로그램이 실행되기 위해서는 프로그렘이 메모리에 로드되어야 한다. 프로그램에서 사용되는 변수들을 저장할 공간도 필요하다. 프로그렘이 메모리에 로드 되면 프로세스가 되며 프로그램이 운영체제로부터 할당받는 대표적인 메모리공간은 아래의 그림과 같다. 코드 영역 : 실행할 코드가 저장되는 텍스트 영역, CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 데이터 영역 : 프로그램의 전역 변수와 정적 변수가 저장되는 영역, 프로그램의 시작과 함께 할당되는 영역이며 프로그램이 종료되면 소멸한다. 힙 영역 : 사용자에 의해 메모리가 동적으로 할당되고 해제되는 영역 스택 영역 : 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역, 스택 프레임의 형태로 스택영역에 저장됨 스택 영역 함수..
CPU의 연산을 돕기 위한 임시적인 저장 공간이다. 32비트 시스템에서의 레지스터를 표현하면 아래의 그림과 같다. EAX(Extended Accumulator Register) : 산술/논리 연산 수행, 함수의 반환값 저장하여 호출 함수의 성공 여부, 실패 여부를 쉽게 파악 가능하다. EBX(Extended Base Register) : ESI/EDI 레지스터와 결합될 수 있으며 기본적으로는 메모리 주소 저장 용도 EDX(Extended Data Register) : EAX와 같이 쓰이고 부호 확장 명령 등에 쓰임, 큰 수의 곱셈 또는 나눗셈 등의 연산이 이루어질 때, EAX레지스터와 함께 쓰임 ECX(Extended Counter Register) : 반복 명령어 사용시 반복 카운터, 시프트 연산자(비..