c/c++语言开发共享关于C语言中free()的问题


可能重复:
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

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐