我在Win32 c ++中测试了HeapAlloc和HeapFree。
我用HeapCreate(0,0,0)创建了私有堆。
接下来,我用HeapAlloc(_heaphandle,0,1024 * 100)分配了100KB。
进程内存增加了大约100KB,但有一些开销。 我已经使用“Windows工作管理器的进程选项卡”检查了这个进程内存。
我有时分配了100KB。 所以,我得到了以下结果。
进程内存:已承诺1,312KB:3472,未提交:258048,已分配:0
进程内存:1,420Kb已提交:7544,未提交:151552,已分配:102400
进程内存:1,524Kb已提交:11616,未提交:45056,已分配:204800
进程内存:1,632KB .............已分配:307200
进程内存:1,736KB .............已分配:409600
接下来,我用HeapFree释放了内存(_heaphandle,0,指针)。
但是,进程内存不会返回内存。当进程内存空闲时,我真的很好奇。
我得到了以下结果。
进程内存:已提交1,736KB:23744,未提交:876544,已分配:409600
进程内存:已承诺1,736Kb:126152,未提交:876544,已分配:307200
进程内存:已承诺1,736Kb:228592,未提交:876544,已分配:204800
最后,我用HeapDestroy(heaphandle)销毁了私有堆。 那么,所有堆内存都是免费的。 进程内存的初始值为1,312KB。
如果我使用了很多记忆,我担心会因缺乏记忆而受到影响。
THX。 :)
答案 0 :(得分:6)
你不会缺乏记忆力。执行HeapFree
时,HeapManager可能实际上不会将其释放回操作系统,并可能将其保留以供将来分配。因此,当您下次执行HeapAlloc
时,它可以从该内存中分配。