2017년 11월 21일 화요일

How to allocate memory dynamically: malloc()과 new의 차이점 (메모리를 동적으로 할당하는 방법)

(출처)
http://drunkenpsycho.tistory.com/m/13

malloc/free

- C언어에서 동적할당을 위해 사용하는 함수
- stdlib.h에 선언되어 있다. 따라서 사용을 위해 stdlib.h를 포함해야 함.
- malloc은 입력받은 바이트 크기 만큼 메모리 공간을 heap memory에 할당함.
- malloc 사용 시, 자료형의 크기를 정확히 알아야 함.
- 수동으로 메모리 할당을 했으므로 사용 뒤에는 반드시 해제도 해주어야 함. 그때 사용되는 함수가 free()임.

(사용법)
int *p;
p=(int*)malloc(sizeof(int));
//code...
//...
//code...
free(p);

1.  //자료형의 크기를 malloc에 파라미터로 입력하면 그 크기 만큼의 메모리를 동적으로 할당하고 그 메모리의 주소를 리턴.
2. malloc의 리턴은 void* 형이므로 할당하고자 하는 자료형 포인터로 형변환한 뒤, 포인터변수에 대입.


new/delete

- C++에서 동적할당을 위해 제공되는 키워드.
- 키워드이므로 헤더파일 포함 시킬 필요 없음.
- new는 할당할 변수의 자료형을 지정하면 해당타입의 포인터를 반환.
- 기본형 이외에 클래스 객체를 new로 동적할당하게 되면 생성자가 자동으로 호출됨.
- new 키워드로 동적할당한 메모리는 delete키워드로 해제.

(사용법)

int *int_dynamic_alloc = new int(123);
delete int_dynamic_alloc;

<malloc과 new의 차이>

1. C++에서는 메모리 동적 할당/해제를 malloc(), free()를 사용할 수도 있고 new, delete키워드를 사용할 수도 있다.
2. C에서는 메모리 동적 할당과 해제는 malloc(), free()만으로 가능.
3. malloc(), free()는 라이브러리(stdlib.h) 제공함수인 반면 new는 C++언어에서 제공하는 키워드.
4. malloc()은 매개변수로 할당할 메모리의 크기를 입력받아 할당한 메모리의 주소값을 void*로 반환하기 때문에 sizeof와 형변환 연산자를 사용해야 함.
반면, new는 할당할 변수의 자료형만 명시하면 알아서 메모리 크기를 할당하고 할당할 자료형과 같은 자료형의 포인터 변수를 리턴함.
5. malloc은 메모리 동적 할당 후 메모리 초기화를 위해 memset과 같은 함수를 호출해야하지만 new의 경우 할당과 동시에 초기화가 가능함.
6. new는 생성자를 자동으로 호출, 클래스를 new로 동적 할당하는 경우 생서앚가 자동으로 호출되므로 객체를 초기화해줄 수 있다.
7. malloc은 realloc이라는 함수로 재할당이 가능. new에는 realloc에 대응하는 것이 없으므로 새로할당, 복사, 이전의 메모리 해제의 과정으로 재할당이 가능.
8. 메모리를 동적할당하여 사용한 후에는 반드시 메모리 해제를 해주어야 하는데 malloc()은 free()로, new는 delete로 가능.
(설명)

댓글 없음:

댓글 쓰기