可能重复:
free和malloc如何在C中工作?
free如何知道在程序中调用时要释放多少字节的内存?
这是特定于实现的,但是当调用malloc
时,分配的内存的大小保持在某处(通常偏离指针本身)。 当调用free
,它将使用存储的大小。
这正是你应该只对malloc
返回的指针调用free
原因。
它是自动完成的。 相应的“malloc”已将大小保存在一个秘密位置(通常存储在距指针的负偏移处)。
当然,这意味着您只能释放与之前由“malloc”分配的块相对应的内存。
询问它如何知道“要释放多少字节”是一个错误。 这并不是说每个字节都单独附加了一个空闲/非空闲状态位(好吧,它可以 ,但这将是一个糟糕的实现)。 在许多实现中,分配中的字节数可能完全不相关; 它是用于管理相关的数据结构。
这是一个可以实现的细节,并且会因不同平台而异。 这是一个如何实现它的例子。
每个free
呼叫必须与知道大小请求的malloc
/ realloc
呼叫配对。 malloc
的实现可以选择将此大小存储在返回的内存的偏移量中。 比如说,通过分配比请求更大的缓冲区,填充前面的大小,然后将偏移量返回到分配的内存中。 然后, free
函数可以简单地使用所提供指针的偏移来发现要释放的大小。
例如
void* malloc(size_t size) { size_t actualSize = size + sizeof(size_t); void* buffer = _internal_allocate(actualSize); *((size_t*)buffer) = size; return ((size_t*)buffer) + 1; } void free(void* buffer) { size_t* other = buffer; other--; size_t originalSize = *other; // Rest of free ... }
答案是特定于实现的。
以上就是c/c++开发分享关于C语言中free()的问题相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/541903.html