我有以下代码:
int* pi = new int[1]();
delete[] pi;
我在 delete[] 操作前后立即在内存窗口中查看 &pi (0x006F9C58) 周围的内存:
为什么它会覆盖数组周围这么多额外的内存?我以为在存储数组大小之前会有一点点,但没有这样的......
最佳答案
分配内存时,会产生开销。您将返回一个指向内存块可用部分的指针。但是内存管理器可以在内存块返回其开销之前和之后自由使用内存。这是使堆分配性能合理所必需的。您所观察到的是完全正常的。
我怀疑您正在使用调试堆,它使用比发布堆更多的开销。当您解除分配内存时,调试堆管理器会将特定的、可预测的、易于内存的值写入内存,以便您更容易在调试器中发现您可能正在写入解除分配的内存。您可能会发现将内存视为十六进制很有启发性。
关于c++ - 为什么 Visual C++ 会在 delete[] 上覆盖这么多额外的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230069/