我有一个程序,需要启动一个带有unordered_map<int,int>条目的100M+。只要机器有足够大的内存,我们就可以根据需要声明一个局部变量吗?或者,即使机器有128 of这样的巨大内存,局部变量的大小也有一些(可调)上限?我知道unordered_map有large内存开销。
我之所以关心这个问题,是因为我在运行JAVA程序时遇到了这样的问题。我知道JAVA有JVM,而C++不需要它。
我正在一台拥有128 8GB内存的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文章讨论堆内存,但我在这里仍然有点困惑。
发布于 2018-03-10 19:00:37
根据我作为C++程序员的经验,您不能将本地数组声明成您想要的大小。局部变量存储在“调用堆栈”中。但是,在您使用STL时,应该没有问题,因为STL数据结构只存储在“调用堆栈”中的几个属性,数据结构的元素存储在堆中。
发布于 2018-03-10 17:32:30
c++可以使用操作系统愿意为单个进程提供的内存。对于32位进程,这不超过4GB,在64位进程上,它将是机器上可用内存和交换空间的总和(这是有限制的,但我不认为当前的机器会遇到它们)。
https://stackoverflow.com/questions/49211854
复制相似问题