【发布时间】:2022-01-25 10:53:00
【问题描述】:
free() 函数是如何工作的?我们在数组或字符串的第一个元素上免费传递一个唯一的指针,这个函数“知道”分配内存的右边界并正确释放它。 但是为什么不能从任何 C 标准函数中获取这些信息呢?
【问题讨论】:
-
这取决于实现。一个常见的实现是在数据之前有一个块头。也就是可以通过malloc返回的指针减去一个固定的量来找到header。
-
请注意,虽然这样的前缀块很常见,但如果你试图从你的应用程序中访问它,你真的会超出
malloc分配的内存区域的范围,你会得到未定义的行为. -
stackoverflow.com/questions/6485586/code-for-malloc-and-free 检查这个答案,它包含指向 malloc 源代码的链接及其工作描述。当你知道内存是如何分配的,你就知道它是如何被释放的。
-
@OlegFlores 非常感谢)
-
您能否详细说明您的问题和问题?为什么需要获取“此信息”?你有一个你认为可以解决的潜在问题吗?请始终直接询问您的实际和潜在问题,这样可以更轻松地帮助您解决这些问题。