我有一个程序使用太多内存来在堆上分配大量小对象。所以我想研究一下优化它的方法。该程序使用Visual C++ 7编译。
有没有办法确定为给定对象实际分配了多少内存?我的意思是当我打电话时new堆分配不小于必要的数量。我怎样才能知道到底分配了多少?
没有确切的答案,因为某些堆管理器可能会使用不同数量的内存来连续分配相同大小的内存。此外,(通常)没有直接的方法来测量特定分配所占用的字节数。
您可以通过分配一定数量的相同大小的项目(例如 4096)并注意所用内存的差异来近似该值。将后者除以前者即可得出答案。请注意,该值随操作系统、操作系统版本的不同而变化,有时应用程序的调试版本可能会启用额外的堆跟踪,从而增加开销。在某些操作系统上,用户可以更改堆策略(即使用一个堆分配器与另一个堆分配器作为默认值)。示例:Windows 和 pageheap.exe
仅供参考,Windows 32 位上的默认(不是 LFH)堆占用:
- sizeof(your_type),向上舍入到 DWORD 边界,
- 3 个指针用于上一个/下一个/大小
- 2 个安全 cookie 指针
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)