【问题标题】:Why does the free() function know about the size of a malloced variable? [duplicate]为什么 free() 函数知道分配变量的大小? [复制]
【发布时间】:2022-01-25 10:53:00
【问题描述】:

free() 函数是如何工作的?我们在数组或字符串的第一个元素上免费传递一个唯一的指针,这个函数“知道”分配内存的右边界并正确释放它。 但是为什么不能从任何 C 标准函数中获取这些信息呢?

【问题讨论】:

  • 这取决于实现。一个常见的实现是在数据之前有一个块头。也就是可以通过malloc返回的指针减去一个固定的量来找到header。
  • 请注意,虽然这样的前缀块很常见,但如果你试图从你的应用程序中访问它,你真的会超出malloc分配的内存区域的范围,你会得到未定义的行为.
  • stackoverflow.com/questions/6485586/code-for-malloc-and-free 检查这个答案,它包含指向 malloc 源代码的链接及其工作描述。当你知道内存是如何分配的,你就知道它是如何被释放的。
  • @OlegFlores 非常感谢)
  • 您能否详细说明您的问题和问题?为什么需要获取“此信息”?你有一个你认为可以解决的潜在问题吗?请始终直接询问您的实际和潜在问题,这样可以更轻松地帮助您解决这些问题。

标签: c memory malloc free


【解决方案1】:

通常动态分配的内存块包含一个前缀,用于存储分配的内存大小。

所以函数free可以访问这个前缀来知道被释放的内存块的大小。

【讨论】:

  • 有没有办法从 C 中访问这个前缀?
  • 如果 realloc() 可以,你也可以。但是:你为什么要这样做?
  • @AntonGolovenko 不是标准定义的方式。
  • @AntonGolovenko 你应该调查一下你的系统中free函数的实现。
  • @AntonGolovenko 不要尝试这样做,它完全依赖于实现而不是标准。而你不需要这个。但是,如果您设法为您的特定实现执行此操作,它可能会起作用......直到您升级到它可能不再起作用的下一个版本。不要这样做。不要在这上面浪费你的时间。
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多