VC ++ 10项目为对象分配了太多内存

时间:2013-05-27 07:22:33

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

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

总结一下:

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

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

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

提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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