C ++是否对局部变量的内存有上限?

时间:2018-03-10 17:18:34

标签: c++ memory heap-memory

我有一个程序,需要发起一个包含100M +条目的unordered_map<int,int>。只要机器有足够大的内存,我们可以声明一个我们想要的大的局部变量吗?或者局部变量的大小有一些(可调)上限,即使机器有128GB的大容量内存?我知道unordered_maplarge内存开销。

我得到了这个问题,因为我在运行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帖子讨论了堆内存,但我在这里仍然有点困惑。

2 个答案:

答案 0 :(得分:0)

c ++可以使用您的操作系统愿意为单个进程提供的内存。 对于32位进程,这不超过4GB,在64位进程上,它将是机器上的总可用内存和交换空间(有限制,但我不认为当前的机器会遇到它们)。

答案 1 :(得分:0)

根据我作为C ++程序员的经验,您无法根据需要声明本地数组。局部变量存储在“调用堆栈”中。但在你的情况下,当你使用STL时,应该没有问题,因为STL数据结构只有一些属性存储在'调用堆栈'中,并且数据结构的元素存储在堆中。 / p>