c - 如何获取动态分配的内存大小?

标签 c linux data-structures malloc dynamic-memory-allocation

使用 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/

相关文章:

c - 避免解析格式字符串,同时仍然使用 printf 缓冲

c - 如何使我的哈希算法更快

linux - 将 ASP.NET 代码通过 FTP 传输到 Linux 系统后修复权限

linux - 如何让其他用户像我一样运行特定的程序sudo,但我们都不是Linux的root用户

linux - 如何使用awk打印路径文件名的尾部

c++ - 如何将 vector 添加到我的结构中以创建一个库存系统,在该系统中我可以仅使用一个结构将多种不同的 Wine 添加到系统中?

c - 与 RPi 的 RS-232 通信

c - 套接字编程: bind()-invalid argument

c - 线性搜索保存到文件的结构中的元素

java - Java 流上的聚合操作如何工作?