【发布时间】:2016-08-30 12:31:39
【问题描述】:
首先:这个问题不是关于“如何使用删除运算符”,而是关于“为什么许多小尺寸的类对象会消耗大量内存”。假设我们有这段代码:
class Foo
{
};
void FooTest()
{
int sizeOfFoo = sizeof(Foo);
for (int i = 0; i < 10000000; i++)
new Foo();
}
空类 Foo 的大小为 1 字节,但执行代码时会消耗大约 600Mb 内存。怎么样?
更新。我已经在 Visual Studio 2010 中的 Win10 x64 上对此进行了测试。来自操作系统任务管理器的内存使用情况。
【问题讨论】:
-
您是否在调试模式下运行?
-
内存分配有开销。多少取决于实施。
-
好读:stackoverflow.com/a/15881440/1870760 关于内存开销
-
我刚刚在 VS 2015 Win 7 x64 上对此进行了测试,而我的应用程序在发布时仅使用了 160 MB。 2010 年的
malloc实现并没有我想象的那么好。 -
我的印象是您仍在调试中运行,在 x64 系统上对我们来说都是 160。
标签: c++ memory memory-leaks new-operator