大数组大小的故障分割

大数组大小的故障分割

下面的代码在2GB机器上运行时给了我一个分段错误,但在4GB机器上工作。

int main(){
   int c[1000000];
   cout << "done\n";
   return 0;}

数组的大小只有4MB。在c+中可以使用的数组的大小是否有限制?


HUH函数
浏览 402回答 3
3回答

达令说

在C或C+中,通常在堆栈上分配本地对象。在堆栈上分配一个大数组,超出堆栈所能处理的范围,因此您将获得一个StackOverflow不要在堆栈上本地分配它,而是使用其他地方。这可以通过以下两种方法来实现:全球或者将其分配到全局堆。如果不使用任何其他编译单元,则可以使用全局变量。为了确保这不是偶然发生的,添加一个静态存储说明符,否则只需使用堆。这将在BSS段中分配,BSS段是堆的一部分:static&nbsp;int&nbsp;c[1000000];int&nbsp;main(){ &nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"done\n"; &nbsp;&nbsp;&nbsp;return&nbsp;0;}这将在数据段中分配,数据段也是堆的一部分:int&nbsp;c[1000000]&nbsp;=&nbsp;{};int&nbsp;main(){ &nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"done\n"; &nbsp;&nbsp;&nbsp;return&nbsp;0;}这将在堆中某个未指定的位置分配:int&nbsp;main(){ &nbsp;&nbsp;&nbsp;int*&nbsp;c&nbsp;=&nbsp;new&nbsp;int[1000000]; &nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"done\n"; &nbsp;&nbsp;&nbsp;return&nbsp;0;}

慕勒3428872

此外,如果在大多数UNIX和Linux系统中运行,可以通过以下命令临时增加堆栈大小:ulimit&nbsp;-s&nbsp;unlimited但是要小心,记忆是一种有限的资源,强大的力量带来了巨大的责任:)

江户川乱折腾

这里可能只是堆栈溢出。数组太大,无法容纳程序的堆栈地址空间。如果您在堆上分配数组,假设您的机器有足够的内存,您应该没事。int* array = new int[1000000];但要记住这需要你delete[]数组。更好的解决办法是使用std::vector<int>并将其调整为1000000元素。
打开App,查看更多内容
随时随地看视频慕课网APP