在某些时候传递堆分配的数组时,我们调用:
delete [] ptrName
编译器如何记住需要释放多少内存?
语境:
我们有几个程序在堆上抛出指向字节数组的指针,出于各种原因,在 int32、int8 和其他适当的情况下进行转换。当内存需要通过 delete 调用取消分配时,究竟会发生什么以确保释放正确的数量?
谢谢
在某些时候传递堆分配的数组时,我们调用:
delete [] ptrName
编译器如何记住需要释放多少内存?
语境:
我们有几个程序在堆上抛出指向字节数组的指针,出于各种原因,在 int32、int8 和其他适当的情况下进行转换。当内存需要通过 delete 调用取消分配时,究竟会发生什么以确保释放正确的数量?
谢谢
编译器分配具有分配内存信息的开销字节,它知道在调用x
时要删除多少。delete []
§ 5.3.4 新
这里,x 和 y 是表示数组分配开销的非负未指定值;new-expression 的结果将从 operator new[] 返回的值偏移这个量。此开销可应用于所有数组 new 表达式,包括引用库函数 operator new[](std::size_t, void*) 和其他布局分配的那些
它没有任何标准。编译器的开发人员通过在某个位置写入将由 new 分配的内存量来决定在哪里存储需要释放的内存量。