sha*_*oth 4 c++ memory memory-management visual-c++
我有一个程序使用太多的内存来分配堆上的许多小对象.所以我想研究一下优化它的方法.该程序使用Visual C++ 7编译.
有没有办法确定为给定对象实际分配了多少内存?我的意思是当我调用new时,堆分配的数量不少于必要的数量.我怎样才能找到确切分配的数量?
没有确切的答案,因为一些堆管理器可能会使用不同数量的内存来进行相同大小的顺序分配.此外,(通常)没有直接的方法来测量特定分配所花费的字节数.
您可以通过分配一定数量的相同大小的项目(例如,4096)并注意使用的内存差异来估算此值.将前者除以前者会给你答案.请注意,此值从操作系统更改为操作系统,从操作系统版本更改为操作系统版本,有时应用程序的调试版本可能会启用额外的堆跟踪,从而增加了开销.在某些操作系统上,用户可以更改堆策略(即默认使用一个堆分配器与另一个堆分配器).示例:Windows和pageheap.exe
仅供参考,Windows 32位上的默认(非LFH)堆占用: