使用 malloc 动态分配内存将返回分配内存的地址。在存储该地址元数据之前;这是一个结构。
struct malloc_chunk {
int prev_size;
int size; // size of memory allocated
struct malloc_chunk* fd;
struct malloc_chunk* bk;
struct malloc_chunk* fd_nextsize;
struct malloc_chunk* bk_nextsize;
};
我想在不使用 malloc_usable_size() 的情况下打印大小值。我试过了,但遇到了段错误。我正在使用 64 位 Ubuntu。
最佳答案
结构依赖于实现。您根本不应该使用这些信息,因为它可能会在下一个编译器甚至下一个编译器版本中发生变化。
您应该管理用户定义结构中的内存大小。
编辑: 内存分配算法通常使用一些对齐方式来
- 避免在进一步分配中使用未对齐的地址
- 在允许未对齐访问但可能导致性能下降的架构上提供最佳性能
- 使用基数倍数的 block 减少堆碎片,例如16 个字节。
因此,malloc
不需要准确分配您作为参数传递的大小。它可以分配一个足以容纳请求大小但可能更多的 block 。 malloc
不需要存储原始值,只有 block 大小是释放
block 所必需的。
因此,可能无法检索在 malloc
函数调用中传递的大小参数。
关于c - 如何获取动态分配的内存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735770/