C와 C++의 차이
http://jjoreg.tistory.com/entry/C-%EA%B3%BC-C%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
malloc, new 차이점
- malloc()는 C의 <stdlib.h> 헤더 파일에서 지원하는 함수로, 인자로 할당할 size를 받는다. 기본적으로 void * 형태의 포인터를 return 하기 때문에 할당할 포인터 자료형에 맞게 casting이 필요하다. 메모리 해제는 free()를 사용한다.
- new 는 C++ 자체에서 지원하는 키워드로 따로 헤더 파일이 필요없다. malloc과는 다르게 할당할 객체의 크기를 알아서 계산하여 heap에 할당하기 때문에 size를 입력할 필요가 없다. 또한 객체 생성시 생성자를 자동으로 호출하기 때문에 생성과 초기화가 동시에 이루어진다. 메모리 해제는 delete 키워드를 사용한다.
차이점
- malloc는 헤더파일이 필요하지만, new는 그렇지 않다.
- malloc은 size를 인자로 받고 자료형 포인터에 따라 캐스팅을 필요로 하지만, new는 할당할 타입과 같은 포인터 변수로 받기만 하면 된다.
- malloc과 달리 new는 생성자를 자동으로 호출하게 된다. 따라서 new는 생성과 동시에 초기화가 이루어진다. 반면에 malloc는 메모리 공간만 확보할 뿐이다.
*(unsigned int *)0x8C0F = 0x8001
*(unsigned int *)0x8C0F = 0x8002;
*(unsigned int *)0x8C0F = 0x8003;
*(unsigned int *)0x8C0F = 0x8004;
*(unsigned int *)0x8C0F = 0x8005;
위의 코드를 보면 같은 포인터 변수에 값을 중복 할당한다. 그 과정에서 컴파일러가 중복된 과정을 제거하여 마지막 줄의 선언만을 실행할 가능성이 있다. 하지만 위와 같은 중복 할당이 로직 상 중요한 요소가 될 때(다른 하드웨어, 운영체제, 스레드가 참조하는 경우) 일련의 과정이 생략된다면 큰 문제를 일으킬 수 있다. 이렇듯 최적화를 수행하지 못하도록 강제하는 것이 volatile이다.
참조: http://skyul.tistory.com/337
스마트포인터
특정 스코프 내에서 선언한 객체는 스코프 범위를 벗어나게 되면 메모리가 해제되는 반면, 동적 할당으로 선언한 객체는 스택이 아닌 힙영역에 할당되기 때문에, 스코프를 벗어나더라도 계속 유지된다. 프로그래머가 명시적으로 동적 할당한 객체에 대해 메모리 해제를 하지 않을 경우 메모리 누수로 인한 심각한 문제를 야기할 수 있다.
프로그래머가 일일이 모든 동적할당된 객체를 해제하는 것 또한 번거로운 일이 아닐 수 없다. 스마트포인터는 일반 포인터와 같지만 자동적으로 메모리를 관리할 수 있는 기능덕에 더 안전하다.
'면접 준비' 카테고리의 다른 글
기술면접 list- 자료구조 (0) | 2017.11.14 |
---|---|
기술 면접 list - 운영체제 (0) | 2017.10.27 |