对堆上的数组解除分配的特定查询

时间:2013-01-31 11:05:00

标签: c++ memory-management compiler-construction heap

在某些时刻传递堆分配的数组时,我们调用:

delete [] ptrName

编译器如何记住需要取消分配多少内存?

上下文:

我们有几个程序在堆上抛出指向字节数组的指针,出于各种原因在int32,int8和其他适当的情况下进行转换。当内存需要通过删除调用取消分配时,究竟是什么才能确保释放正确的数量?

由于

2 个答案:

答案 0 :(得分:1)

编译器分配具有已分配内存信息的x字节开销,它知道在调用delete []时删除多少。

§5.3.4NEW

  • new T [5]会调用operator new和
  • new(2,f)T [5]导致操作员new的调用。
  

这里,x和y是表示数组的非负未指定值   分配开销; new-expression的结果将被抵消   从运算符new []返回的值中得到这个数量。这个   开销可以应用于所有数组新表达式,包括那些   引用库函数operator new [](std :: size_t,void *)   和其他安置分配

答案 1 :(得分:0)

没有任何标准可言。编译器的开发人员通过写入将由new分配的某些内存量来做出决策,在哪里存储需要释放多少内存。