1. C와 C++의 Memory 할당의 차이점
C 는 Malloc 방식으로 Memory가 할당되고 C++을 new 방식으로 Memory가 할당됩니다.
Malloc은 함수 new 는 연산자,
C++에서 new는 내장 되어있어서 따로 헤더가 필요 없지만 C에서는 Malloc을 사용하기 위해서
stdlib.h 라는 헤더가 필요합니다.
Memory 할당은 Heap 영역에 할당되게 됩니다.
2. Memory 구조
1. 코드 영역 : 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 합니다.
2. 데이터 영역 : 메모리 데이터 영역은 프로그램의 전역변수와 정적(Static)변수가 저장되는 영역입니다.
프로그램의 시작과 함께 할당되며 프로그램이 종료하면 소멸하는 영역입니다.
3. 힙 영역 : 사용자가 관리할 수 있는 Memory영역으로 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.
메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.
4. 스택영역 : push동작으로 데이터를 저장하고 pop동작으로 데이터를 인출하고, 후입선출방식에 따라서 동작합니다.
메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
3. 오버로딩과 오버라이딩의 차이
오버로딩은 같은 클래스에서 같은 이름의 함수를 사용하는 것이고,
오버라이딩은 부모클래스에서 정의한 함수를 자식클래스에서 변경하는 것입니다.
오버리이딩을 사용할때는 함수이름의 뒤에 override를 붙여주는 것이 좋습니다.
이를 붙이게 될 경우에는 오탈자가 있을 경우에 오버라이딩이 될 수 없는 함수라고 알려주기도 하고,
명시적으로 보이기 때문에 무엇이 새로 생성한 함수이고 무엇이 오버라이딩된 함수인지 보다 확실하게 알 수 있습니다.
4. 스마트 포인터
C++에서는 new할당을 하게 될 경우에는 반드시 delete를 해서 메모리를 해제해 주어야 합니다.
하지만 만에하나 해지하지 않았을 경우를 대비하여 사용이 끝난 메모리를 자동으로 해제해주는
클래스 템플릿이 스마트 포인터 입니다.
기본적으로 new 키워드를 사용하여 기본 포인터가 실제 메모리를 가리키도록 한 후에 기본포인터를 스마트 포인터에 대입하여 사용합니다.
정의된 스마트포인터의 수명이 다하면 소멸자에서 delete키워드를 사용하여 할당된 메모리를 자동으로 해제합니다.
이를 사용하게 되면 따로 메모리를 해제할 필요가 없습니다.
C++11이전에는 auto_ptr을 사용하여 사용했지만
C++11부터는 unique_ptr, shared_ptr, weak_ptr 세 종류의 새로운 스마트 포인터를 제공합니다.
unique_ptr은 하나의 스마트 포인터만이 특정객체를 소유할 수 있도록 객체에 소유권 개념을 도입한 스마트 포인터입니다
shared_ptr은 하나의 특정객체를 참조하는 스마트 포인터가 총 몇 개인지 참조하는 스마트 포인터입니다.
이렇게 참조하고 있는 스마트 포인터의 개수를 참조 횟수(reference count)라고 합니다.
weak_ptr은 하나 이상의 shared_ptr 인스턴스가 소유하는 객체에 대한 접근은 제공하지만, 소유자의 수에는 포함되지 않는 스마트포인터입니다.
만약 서로를 상대방을 가리키는 shared_ptr을 가지고 있다면, 참조횟수는 절대로 0이되지 않아서 메모리는 영원히 해제되지 않는데 이러한 상황은 순환참조(circular reference)라고 합니다.
이러한 shared_ptr 인스턴스 사이의 순환참조를 끊어주기 위해서 사용되는 것이 weak_ptr입니다.
5. 너비 우선 순회와 깊이 우선순회를 설명하고 차이점을 기술.
너비 우선 순회란 시작노드로부터 인접한 노드를 우선적으로 탐색하는 방식입니다.
두 노드 사이의 최단경로 혹은 임의의 경로를 찾고 싶을 때 이 방법을 선택합니다.
대표적으로 우선순위 큐와 다익스트라 알고리즘이 이 방식을 사용합니다.
깊이 우선순회는 시작노드로부터 시작하여 다음분기로 넘어가기 전에 해당분기를 완벽하게 탐색하는 방법입니다.
자기 자신을 호출하는 재귀적인 순환 알고리즘의 형태를 띄고 있습니다.
이 순회방식의 가장 큰 특징은 자신이 어떤노드를 방문했었는지 반드시 알아야만 한다는 것입니다.
한달 포트폴리오인 네크로덴서를 제작하였을때 시야탐색을 위해서 사용한 순회방식이기도 합니다.
'기술 면접 준비' 카테고리의 다른 글
기술면접 준비 4 (0) | 2019.06.13 |
---|---|
기술면접 준비 3 (0) | 2019.06.12 |
기술 면접 준비 (Unity) (0) | 2019.06.10 |
기술면접준비 2 (0) | 2019.06.10 |