new/delete
的动态分配据说发生在 free-store,
而 malloc/free
操作使用堆。
我想知道在实践中是否存在实际差异。
编译器会区分这两个术语吗? (自由存储和堆,不是new/malloc
)
最佳答案
见 http://www.gotw.ca/gotw/009.htm ;它可以比我更好地描述堆和自由存储之间的差异:
免费商店:
The free store is one of the two dynamic memory areas, allocated/freed by new/delete. Object lifetime can be less than the time the storage is allocated; that is, free store objects can have memory allocated without being immediately initialized, and can be destroyed without the memory being immediately deallocated. During the period when the storage is allocated but outside the object's lifetime, the storage may be accessed and manipulated through a void* but none of the proto-object's nonstatic members or member functions may be accessed, have their addresses taken, or be otherwise manipulated.
堆:
The heap is the other dynamic memory area, allocated/freed by malloc/free and their variants. Note that while the default global new and delete might be implemented in terms of malloc and free by a particular compiler, the heap is not the same as free store and memory allocated in one area cannot be safely deallocated in the other. Memory allocated from the heap can be used for objects of class type by placement-new construction and explicit destruction. If so used, the notes about free store object lifetime apply similarly here.
关于C++,自由存储与堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1350819/