c++ - 为什么 Visual C++ 会在 delete[] 上覆盖这么多额外的内存?

标签 c++ visual-c++

我有以下代码:

int* pi = new int[1]();
delete[] pi;

我在 delete[] 操作前后立即在内存窗口中查看 &pi (0x006F9C58) 周围的内存:

before/after delete[]

为什么它会覆盖数组周围这么多额外的内存?我以为在存储数组大小之前会有一点点,但没有这样的......

最佳答案

分配内存时,会产生开销。您将返回一个指向内存块可用部分的指针。但是内存管理器可以在内存块返回其开销之前和之后自由使用内存。这是使堆分配性能合理所必需的。您所观察到的是完全正常的。

我怀疑您正在使用调试堆,它使用比发布堆更多的开销。当您解除分配内存时,调试堆管理器会将特定的、可预测的、易于内存的值写入内存,以便您更容易在调试器中发现您可能正在写入解除分配的内存。您可能会发现将内存视为十六进制很有启发性。

关于c++ - 为什么 Visual C++ 会在 delete[] 上覆盖这么多额外的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230069/

相关文章:

c++ - "Build succeeded"但 "The breakpoint will not currently be hit"

c++ - std::function 在 C++ 中接受不同的函数签名

c++ - FFTW:只对真实结果感兴趣

visual-c++ - pcap_findalldevs_ex 函数未定义

c++ - 为什么 MSVC++ 需要 std::setprecision 来启用 std::hexfloat 的全精度输出?

c++ - std::exp 给出与复数的 MATLAB exp 不同的结果

c# - c++和c#之间通过管道进行通信

C++ 终端中先前的文本被删除并被新文本替换

c++ - 比较两个宽字符串 Visual C++

c++ - while 循环和 getchar()