局部数组变量exc坏访问分段&本地还是全球?

时间:2016-10-22 20:20:13

标签: c++ arrays global local

您好我已经看过这个Maximum size of local array variable但是我想知道为什么如果数组设置为全局并且如果它位于主要数据之后则不正常。

关于另一个问题: 拥有在a.cpp中定义并在带有extern的a.hpp中声明的大内存对象是一个好习惯吗?或者更好地处理在本地函数中定义的大内存,但定义为vector或new或malloc并将它们传递给fonction参数。

它看到了我的经历,这是我必须解决的问题......

谢谢

#include <iostream>
using namespace std;

#define N (10000000000000)
int sd[N];

int main() {
  // int sd[N];
  return 0;
}

1 个答案:

答案 0 :(得分:0)

在全球范围内宣布:

int sd[N];

int main() {
  return 0;
}

结果二进制文件变得非常重要。当进程加载到内存中时,整个全局内存数据集将映射到。

在函数中声明:

int main() {
  int sd[N];
  return 0;
}

一旦被调用的函数分配了内存 - 并且它已从堆栈中分配。线程的堆栈内存通常初始化为低,接近1兆字节或更低。一旦堆栈内存耗尽,它的游戏结束。

正如其他人在评论中指出的那样,使用堆内存动态地分配LARGE数组是正确的,这通常很丰富。

int main() {
  int* sd = new int[N];

  ...

  delete [] sd; // free the allocated memory
  return 0;
}

更好,所以你不必记住删除:

int main() {
  std::vector<int> sd(N);

  ...

}