delete
如何知道要释放多少字节?
我读到在new返回的实际指针地址之前有一些块,其中包含块地址详细信息。
此处有人知道此块有多少字节或该块的格式是什么?
答案 0 :(得分:7)
通常,这取决于实现。
通常实现的方式是new / malloc将分配比你要求的更多的字节,并且将使用额外的字节进行一些簿记:多次分配的块也将保存在链表中,所以额外的字节将用于存储next / prev指针,以及块的大小。
但这不是强制性的。 new / malloc调用也可以将你的指针和块的大小存储在地图中。
如果您对特定实现感兴趣,则必须提供更多信息(例如,您使用的运行时/编译器是什么?)。
答案 1 :(得分:2)
new 运算符和 malloc 函数以自己的特定方式处理内存,所以
如果你一定要试图搞砸 malloc 或 new 的内部运作(这似乎是你的目标),那你就错了^ ^
答案 2 :(得分:1)
这个问题没有一个正确的答案,因为它取决于具体情况。在某些情况下,编译器在编译时知道对象的大小,因此delete知道要释放多少字节。在编译时未知存储器大小的情况下,无论是涉及存储器映射还是您自己建议的存储器映射,指针前面都有一个字,它指示分配的字节数。
我相信很多这是针对具体实现的,而不是你可以依赖的特定方式。这个问题与one非常相似。