0

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

delete [] ptrName

编译器如何记住需要释放多少内存?

语境:

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

谢谢

4

2 回答 2

1

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

§ 5.3.4 新

  • new T[5] 导致调用 operator new,并且
  • new(2,f) T[5] 导致调用 operator new。

这里,x 和 y 是表示数组分配开销的非负未指定值;new-expression 的结果将从 operator new[] 返回的值偏移这个量。此开销可应用于所有数组 new 表达式,包括引用库函数 operator new[](std::size_t, void*) 和其他布局分配的那些

于 2013-01-31T11:21:26.110 回答
0

它没有任何标准。编译器的开发人员通过在某个位置写入将由 new 分配的内存量来决定在哪里存储需要释放的内存量。

于 2013-01-31T11:07:48.763 回答