malloc/free new/delete
메모리가 heap에 할당된다. 메모리가 Free Store에 할당된다.
결과가 타입 지정 없이 void*로 반환된다. 결과가 명확한 타입이 지정된다.
할당에 실패하면 NULL을 반환한다. 할당에 실패하면 error를 throw 한다.
메모리 할당 할 때 사이즈를 지정해 줘야 한다. 컴파일러가 메모리 크기를 계산해서 잡아준다.
더 큰 메모리로 재할당 하는 과정이 비교적 간단하다. 더 큰 메모리로 재할당 하는 과정이 비교적 귀찮다.
기본적으로 함수이다. 기본적으로 연산자이다.

 

malloc/free는 메모리를 할당하는 함수로, 할당 시 메모리가 heap 영역에 바로 할당이 된다.

또한 type과 관계 없이 반환하는 타입은 반드시 void*이며 실패 시 NULL을 반환한다.

메모리를 할당할 때에는 반드시 객체 크기를 Byte 단위로 지정을 해줘야 한다.

그리고 생성된 메모리 영역은 쓰레기값으로 차있기 때문에 초기화 과정이 따로 요구된다.

 

new/delete는 연산자이기 때문에 사용자가 overloading이 가능하다.

메모리를 할당 할 때 크기를 컴파일러가 계산해주기 때문에 따로 지정 할 필요가 없고,

연산 결과가 명확한 타입으로 반환되며 실패 시 Error를 throw 하기 때문에 에러 처리가 필요하다.

메모리를 할당할 때 free store에 할당이 되며, 할당 시 생성자를 호출하기 때문에 값이 초기화가 되어 있다.

 

new에서 생성자는 구현된 생성자에 따라 방법이 다르다.

아무것도 없다면 default 생성자를 호출한다던가, 

중괄호로 묶여 있다면 Initialize list를 호출한다던가.

 

대략적으로 짚어 보았는데 이렇게 대답을 하면 Free Store가 무엇인지 물어볼 것이다.

Free Store는 C에서의 Heap영역이라 보면 된다.

단 이는 개념적인 부분이고 실제로 메모리 영역이 나뉘어져 있는 것은 아니다.

다만 C++에서는 Heap보다는 Free Store라는 용어를 사용하는 것이 더 바람직하다는 얘기도 있다.

 

자료 출처

https://jacking75.github.io/Cpp_memory_region/

 

C++ - 메모리 영역 - jacking75

메모리 영역에 대해서 5 종류의 메모리 영역 C++ 에서는 다른 특성을 갖는 5 종류의 메모리 영역이 존재한다. (※ 단 c++ 규격에는 스택이나 힙은 명시 하지 않고 Free-Store는 명시 하고 있다) Const Data

jacking75.github.io

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

 

+ Recent posts