Con*_*tin 5 windows free memory-management msvcrt
Windows HeapFree,msvcrt free:它们是否会释放被释放的内存?我试图估计如果不在退出时释放内存将显着加快应用程序关闭.
注意:这是一个非常具体的技术问题.这不是应用程序应该或不应该free在退出时调用.
我进行了测试HeapFree。以下程序在HeapFreei = 31999 处存在访问冲突:
#include <windows.h>
int main() {
HANDLE heap = GetProcessHeap();
void * bufs[64000];
// populate heap
for (unsigned i = 0; i < _countof(bufs); ++i) {
bufs[i] = HeapAlloc(heap, 0, 4000);
}
// protect a block in the "middle"
DWORD dwOldProtect;
VirtualProtect(
bufs[_countof(bufs) / 2], 4000, PAGE_NOACCESS,
&dwOldProtect);
// free blocks
for (unsigned i = 0; i < _countof(bufs); ++i) {
HeapFree(heap, 0, bufs[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈是
ntdll.dll!_RtlpCoalesceFreeBlocks@16() + 0x12b9 bytes
ntdll.dll!_RtlFreeHeap@12() + 0x91f bytes
shutfree.exe!main() Line 19 C++
Run Code Online (Sandbox Code Playgroud)
所以看起来答案是“是”(这free也适用,因为它HeapFree在内部使用)
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |