gpt4 book ai didi

c++ - 个别动态分配的极端内存使用

转载 作者:太空宇宙 更新时间:2023-11-04 15:53:44 25 4
gpt4 key购买 nike

这是我在 windows 7 下的 MSVC++ 2010 上做的一个简单测试:

// A struct with sizeof(s) == 4, e.g 4 bytes
struct s
{
int x;
};

// Allocate 1 million structs
s* test1 = new s[1000000];

// Memory usage show that the increase in memory is roughly 4 bytes * 1000000 - As expected
// NOW! If I run this:
for (int i = 0; i < 1000000; i++)
new s();

// The memory usage is disproportionately large. When divided by 1000000, indicates 64 bytes per s!!!

这是常识还是我遗漏了什么?以前我总是习惯于在需要时即时创建对象。例如 new Triangle() 用于网格中的每个三角形等。

单个实例的动态内存分配是否确实存在数量级的开销?

干杯

编辑:

刚刚使用 g++ 在 Windows XP 上编译并运行了相同的程序:现在开销是 16 字节,而不是之前观察到的 64 字节!非常有趣。

最佳答案

不一定,但操作系统通常会为您预留内存,以它认为方便的任何大小的 block 为单位;在您的系统上,我猜它会为您提供每个请求 64 字节的倍数。

毕竟,跟踪内存分配会产生开销,而且保留非常小的数量是不值得的。

关于c++ - 个别动态分配的极端内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3277898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com