Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

로또

new vs malloc 본문

CS

new vs malloc

아롱로또 2023. 10. 27. 17:40

공통점

new, malloc() 모두 동적 할당을 위해 사용한다.

 

차이점

new는 연산자이고 malloc()은 라이브러리를 통해 제공되는 함수이다. 

 

new는 요청한 type의 생성자를 자동으로 호출해주는 반면, malloc()은 단순히 메모리만 할당한다.

 

new는 동적 할당을 원하는 타입만 지정하면 크기가 자동으로 지정되지만, malloc()은 할당을 원하는 크기를 필요로 한다. 또한 return-type이 void *이기 때문에 cast 연산자의 도움을 필요로 한다.

 

new는 할당과 동시에 초기화가 가능하지만, malloc()은 할당 이후 별도의 초기화 과정이 필요하다.

 

언제 malloc()을 사용하는가?

void* malloc(size_t size)

malloc()은 할당 이후 realloc()을 이용해 메모리 크기를 조정할 수 있는 반면, new는 할당된 메모리에 대해 크기 조정이 불가능하여 때문에 새로이 할당, 복사, 해제하는 과정을 거쳐야 한다.

때문에 재할당이 빈번하게 이루어져야 하는 상황이라면 malloc()을 더 유용하게 사용할 수 있다.

 

realloc()

void* realloc(void* ptr, size_t size);

realloc()은 ptr이 가리키는 메모리 주소의 크기를 size로 변경할 수 있다.

만약, size만큼 할당하는 것이 불가능하다면 NULL을 return한다.

 

이러한 특성 때문에 realloc()시 주의할 점이 있다.

#include <cstdlib>

int main(){
    const int siz = 10;
    int* ptr = (int*)malloc(sizeof(int) * siz);
    ...
    ptr = (int *)realloc(ptr, sizeof(int) * 1000);
    ...
}

위와 같은 코드에서, realloc()이 실패하면, ptr 변수에 null이 저장되어 이전에 할당받은 값에 접근할 방법이 사라져 garbage가 발생하게 된다. 때문에, 다음과 같이 임시 변수를 생성해두고 realloc()을 호출하는 것이 안전하다.

#include <cstdlib>

int main(){
    const int siz = 10;
    int* ptr = (int*)malloc(sizeof(int) * siz);
    ...
    int* tmp = ptr;
    ptr = (int *)realloc(ptr, sizeof(int) * 1000);
    ...
}

위와 같이 사용하면, ptr에 null이 저장되더라도 tmp를 통해 이전에 할당받은 값에 접근할 수 있다.

 

참고자료

https://velog.io/@keybomb/cc-malloc-vs-new

 

[c/c++] malloc vs new

c언어에서 동적할당을 하기 위해서는 malloc, calloc 을 사용한다. c++은 new 라는 연산자가 존재하는데 차이가 무엇인지 알아보자. malloc과 free new와 delete 차이점 malloc은 해당 포인터의 자료형을 모르

velog.io

https://hwan-shell.tistory.com/12

 

c++ new의 사용법, malloc과의 차이(free, delete)

※컴퓨터의 메모리 구조를 알고 보시면 더 쉽게 이해할 수 있습니다. 메모리 구조 보러가기(클릭) 프로그램을 만들다 보면 상황에 따라 추가적인 메모리 공간을 실시간으로 확보해야 할 경우가

hwan-shell.tistory.com

https://woo-dev.tistory.com/124

 

[C/C++] realloc 함수 사용 시 주의할 점

[realloc] realloc 함수는 malloc을 통해 할당된 메모리의 크기를 축소하거나 확장하고 싶을 때 사용한다. [realloc 사용 시 주의사항] void* realloc(void* ptr, size_t size); 1. realloc은 ptr이 가리키는 메모리 주소

woo-dev.tistory.com

 

'CS' 카테고리의 다른 글

비트 연산 정리  (1) 2023.10.09
Tail Call Optimization  (0) 2023.09.12
참조 지역성  (0) 2023.09.12