我有一个程序,需要发起一个包含100M +条目的unordered_map<int,int>
。只要机器有足够大的内存,我们可以声明一个我们想要的大的局部变量吗?或者局部变量的大小有一些(可调)上限,即使机器有128GB的大容量内存?我知道unordered_map
有large内存开销。
我得到了这个问题,因为我在运行JAVA程序时遇到了这样的问题。我知道JAVA有JVM,而C ++不需要JVM。
我正在使用128GB内存的Linux机器上开发代码,但潜在客户可能会在具有8GB内存的Linux机器上使用它。
代码如下:
int func() {
unordered_map<int,int> mp;
for (int i=0; i<INT_MAX; i++) mp[i] = i-1;
return mp.size();
}
This帖子讨论了堆内存,但我在这里仍然有点困惑。
答案 0 :(得分:0)
c ++可以使用您的操作系统愿意为单个进程提供的内存。 对于32位进程,这不超过4GB,在64位进程上,它将是机器上的总可用内存和交换空间(有限制,但我不认为当前的机器会遇到它们)。
答案 1 :(得分:0)
根据我作为C ++程序员的经验,您无法根据需要声明本地数组。局部变量存储在“调用堆栈”中。但在你的情况下,当你使用STL时,应该没有问题,因为STL数据结构只有一些属性存储在'调用堆栈'中,并且数据结构的元素存储在堆中。 / p>