【发布时间】:2016-10-02 05:33:53
【问题描述】:
我想知道动态分配数组的大小是否存储在内存中的某个位置,因为在由malloc() 或其家族初始化的指针上调用free() 函数会准确地释放内存。
那么如果free() 确切地知道要释放多少内存,这是否意味着大小值存储在内存中的某个位置?
我们可以检索这个值吗?
【问题讨论】:
-
应该依赖于库的实现。
-
@layzak 简单看一下 (g)libc 的源代码;瞄准 free/malloc 的定义 - github.com/lattera/glibc/tree/master/malloc - 实际上,是的,它存储了已用 mem 块的开始和结束。
-
高度依赖于实现。在 unix 上,malloc 是比 sbreak 或 mmap 更高层次的抽象,它有自己的簿记结构。但除非您想开发分配库,否则作为 C 或 C++ 程序员,您应该考虑将
malloc-free或new-delete视为不透明的动态分配系统。
标签: c memory memory-management malloc dynamic-memory-allocation