2013-09-07 6 views
0

난 그냥 C++ 할당 및 런타임 중에 해제 할 수있는 메모리 블록 두 종류가 있다고 들었습니다. "malloc에"와 "자유"공간무료 메모리라는 메모리를 사용, "새로운"와 을 사용하여 "삭제"고 말한다.무료 메모리 공간과 힙

글쎄, 나는 무료 메모리 공간과 힙 사이의 차이점은 무엇입니까 것을 궁금해?

C++의 기본 구현 연산자 new은 C의 malloc을 사용합니까?

"new"와 "malloc"이 다른 메모리 블록을 사용하는 경우 "new"로 할당 된 메모리를 막기 위해이 두 종류의 블록에 대해 일정량의 메모리를 예약하는 데 컴파일러가 필요합니다. "malloc"에 의해 중복 할당 된 메모리?

+0

가능한 복제본 : http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free –

+0

참조 http://stackoverflow.com/questions/ 6161235/what-of-the-heap-and-the-free-store의 차이점. 아마도 당신은 아마도 http://www.gotw.ca/gotw/009.htm의 무료 저장소와 힙의 차이점을 가지고있는 오래된 Herb Sutter 문서를 읽을 것이라고 생각합니다. – bjackfly

답변

0

여기서 메모리는 구현 및 라이브러리에 따라 할당됩니다. C++ 언어는이를 지정하지 않습니다.

/삭제의 malloc/무료 새에 의해 사용되는 낮은 수준의 할당을 담당하는 기본 라이브러리는 (항상 경우) 일반적으로 동일합니다. 그것에 의해 할당

메모리는 일반적으로 어느 heap 또는 mmap을 사용하고 있습니다. 다른 하나는 사용할 수 없습니다 일에 대한 "특정 메모리 영역"없다, 그래서

0

는 새로운 malloc을 모두 결국 커널에서 메모리 블록을 요청합니다. 그러나 메모리를 삭제하거나 해제 할 때 코드는 일부 검사를 수행하고 청크를 커널에 다시 릴리스해야합니다.

차이점은 회계 때문입니다. 예를 들어 한 가지 문제는 아주 작은 할당으로해야 할 일입니다. 나는. bool을 저장하기 위해 커널 메모리 청크를 요청하고 싶지는 않습니다. 몇 가지 최적화가 있으므로 효율적으로 작동하고 malloc과 new 사이의 최적화가 다릅니다.

+0

'new'와'malloc'은 반드시 메모리를 요청하지 않습니다. 커널. 요청한 크기에 따라 호출 전에 라이브러리에서 메모리를 요청할 수 있습니다. 'free'와'delete'는 메모리를 다시 커널로 릴리즈 할 필요가 없습니다. 이것은 구현에 의존합니다. – jlliagre