删除如何工作?

时间:2011-03-24 06:53:55

标签: c++ memory-management

  

可能重复:
  C programming : How does free know how much to free?

delete如何知道要释放多少字节? 我读到在new返回的实际指针地址之前有一些块,其中包含块地址详细信息。

此处有人知道此块有多少字节或该块的格式是什么?

3 个答案:

答案 0 :(得分:7)

通常,这取决于实现。

通常实现的方式是new / malloc将分配比你要求的更多的字节,并且将使用额外的字节进行一些簿记:多次分配的块也将保存在链表中,所以额外的字节将用于存储next / prev指针,以及块的大小。

但这不是强制性的。 new / malloc调用也可以将你的指针和块的大小存储在地图中。

如果您对特定实现感兴趣,则必须提供更多信息(例如,您使用的运行时/编译器是什么?)。

答案 1 :(得分:2)

new 运算符和 malloc 函数以自己的特定方式处理内存,所以

  • 如果您使用'new'分配内存,则使用'delete'
  • 如果您使用'malloc'分配内存使用'free'
  • 如果您不知道内存的分配方式/人员/位置,请不要将其释放

如果你一定要试图搞砸 malloc new 的内部运作(这似乎是你的目标),那你就错了^ ^

答案 2 :(得分:1)

这个问题没有一个正确的答案,因为它取决于具体情况。在某些情况下,编译器在编译时知道对象的大小,因此delete知道要释放多少字节。在编译时未知存储器大小的情况下,无论是涉及存储器映射还是您自己建议的存储器映射,指针前面都有一个字,它指示分配的字节数。

我相信很多这是针对具体实现的,而不是你可以依赖的特定方式。这个问题与one非常相似。