在C/C++中,当您想要动态分配内存时,通常会调用malloc
这很好,但是如果您调用realloc
直觉上,我可以想出一个答案,但我对实现细节感兴趣-它是如何真正实现的?它是否与编译器相关?它是标准的一部分吗?
谢谢!
void* malloc(size_t size);
以返回一个指向大小为size字节的内存块的指针。使用完这个内存块后,您需要调用free()
将内存释放回堆。这很好,但是如果您调用realloc
void* realloc(void* ptr, size_t size);
来更改ptr指向的内存块的大小,那么您仍然需要在使用内存后调用free(),但我的问题是编译器如何知道要释放多少内存?直觉上,我可以想出一个答案,但我对实现细节感兴趣-它是如何真正实现的?它是否与编译器相关?它是标准的一部分吗?
谢谢!
malloc
函数,但在 C++ 中则不需要。 - David Rodríguez - dribeasmalloc
和free
(以及realloc
、calloc
等)是库函数,它们有自己的数据结构,并动态跟踪内存分配。实际上并没有标准(尽管有一些常用算法),因为库可以选择按照自己的方式实现内存管理。 - Michael