【问题标题】:VC++ 10 project allocates too much memory for objectsVC++ 10 项目为对象分配过多内存
【发布时间】:2013-05-27 07:22:32
【问题描述】:

我正在将 VC++ 10 用于我正在处理的 C++ 项目,并且出于某种原因,每当我分配一个对象时,系统都会为其分配 4kb 的内存(即使该对象有几个字节长)。

总结一下:

  • 使用 new/malloc 分配小对象会导致为每个对象分配 4kb。
  • 我用一个新项目验证了项目设置,没有任何差异。
  • 该项目使用外部 C dll,并包含一个头文件,其中包含该 dll 的导出函数和结构的声明。
  • 测试系统是 Win7 x64 但应用程序是为 x86 编译的

项目相当大,但我没有找到任何指令告诉系统分配那么多内存,我可以验证传递给 new/malloc 的参数是对象的正确大小。

请注意,我的项目中的所有对象/结构都会发生这种情况。

提前谢谢你。

【问题讨论】:

  • 您是否在调试模式下构建?
  • 您是如何观察到 4kb 值的?我强烈怀疑这只是正常的内存分页行为。
  • 您可以发布内存分配的源代码吗?
  • Can you post source code for your allocation? 以及如何测量内存分配
  • @user1400757 尝试两个对象。您可能会发现内存消耗没有变化。

标签: c++ visual-c++ memory-management


【解决方案1】:

假设您使用的是 x86,内存只能以页面大小的块或更大的形式分配给内存分配器实现,默认页面大小为 4 KB。

您将看到第一个对象的进程工作集有 4kb 的差异,但在该页面用完之前,您应该看不到后续分配的任何内容。

(假设您在发布模式下构建。在调试模式下,CRT 可能会为每个对象使用更多内存来进行金丝雀/边界检查)

【讨论】:

  • 其实这是我所期待的,但它为每个对象分配了 4kb
  • 那么,[status-norepro] 在这里。
  • 好的,应用程序验证程序似乎已加载可执行文件。这导致了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 2015-10-15
  • 2014-11-29
  • 1970-01-01
  • 2014-03-17
  • 2017-05-18
  • 1970-01-01
相关资源
最近更新 更多