C++ 끄적임
[ C++ ] new - delete , malloc - free (ft. Free Store vs Heap)
algohun
2024. 12. 1. 19:34
new/delete와 malloc/free의 차이
C++에서 동적 메모리를 할당할 때 사용하는 방법으로 new/delete와 malloc/free가 있습니다. 이 둘은 기능적으로 비슷해 보이지만, 중요한 차이점이 있습니다.
new/delete
- C++에서 동적 메모리를 할당하고 해제하는 데 사용됩니다.
- 객체를 생성하면서 생성자(Constructor)를 호출하고, 해제할 때 소멸자(Destructor)를 호출합니다.
- 타입 안전성을 제공하며, 반환된 포인터는 요청한 타입과 동일합니다.
malloc/free
- C에서 사용되던 동적 메모리 관리 함수로, C++에서도 사용할 수 있습니다.
- 메모리 블록을 할당하거나 해제하지만, 객체의 생성자와 소멸자는 호출되지 않습니다.
- 반환 타입은 void*로, 사용하려면 명시적으로 형 변환이 필요합니다.
Free Store vs Heap
메모리 구조는 그림과 같습니다.
C++에서는 Heap 대신에 Free Store라는 개념을 사용하며,
new/delete는 Free Store를, malloc/free는 Heap을 사용합니다.
Free Store와 Heap은 개념적으로는 다르다고 구분됩니다.
하지만 실제로는 대부분의 컴파일러에서 동일한 물리적 메모리 공간을 사용할 수 있습니다.
즉, new/delete와 malloc/free가 같은 메모리 풀(pool)을 공유하는 경우가 많습니다.
다만, 임베디드 시스템 같은 환경에서는 제한된 자원을 효율적으로 사용하기 위해 Free Store와 Heap을 물리적으로 분리할 수 있습니다.
출처: https://stackoverflow.com/questions/1350819/c-free-store-vs-heap
C++, Free-Store vs Heap
Dynamic allocations with new/delete are said to take place on the free-store,while malloc/free operations use the heap. I'd like to know if there is an actual difference, in practice. Do compilers...
stackoverflow.com