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

Does C++ have an upper bound on the memory of a local variable?

本文关键字:是否 内存 局部变量 C++      更新时间:2023-10-16

我有一个程序需要启动一个具有100M +条目的unordered_map<int,int>。只要机器有足够大的内存,我们就可以声明一个我们想要的局部变量,这是真的吗?或者即使机器有 128GB 等巨大内存,局部变量的大小也有一些(可调(上限?我知道unordered_map内存开销很大。

我之所以担心,是因为我在运行 JAVA 程序时遇到了这样的问题。我知道JAVA有JVM,而C++不需要它。

我正在具有 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();
}

这篇文章讨论了堆内存,但我在这里仍然有点困惑。

根据我作为程序员C++的经验,你不能声明你想要的本地数组。局部变量存储在"调用堆栈"中。但是在您的情况下,当您使用 STL 时,应该没有问题,因为使用 STL 数据结构时,只有少数属性存储在"调用堆栈"中,并且数据结构的元素存储在堆中。

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