-4

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

总结一下:

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

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

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

先感谢您。

4

1 回答 1

1

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

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

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

于 2013-05-27T07:28:04.083 回答