当前位置: 首页 > 知识库问答 >
问题:

C/C程序的最大堆栈大小?

卓瀚
2023-03-14

我试过下面的程序。创建此程序的目的是了解有关堆栈大小的更多信息。

int main()
{
    int nStack[100000000];
    return 0;
}

执行上述代码后,由于堆栈大小分配过大,程序崩溃。堆栈的最大可能大小是多少?是否为每个程序/计算机固定?可以增加吗?

我想知道是为了知识。如果有人能提供C/C中的例子,那将是非常有帮助的。

共有3个答案

凌通
2023-03-14

我尝试了以下程序。

int main()
{
    int nStack[519492];
    cout<<"Okay!";
    return 0;
}

输出:

Okay!

但是如果我将数组大小增加1字节,程序就会崩溃。

int main()
{
    int nStack[519493];
    cout<<"Okay!";
    return 0;
}

输出:

No output. Program crashes.
慕乐语
2023-03-14

对于基于Linux的应用程序,我们可以使用getrlimit和setrlimit API了解各种内核资源限制,如核心文件大小、cpu时间、堆栈大小、nice值、最大进程数等。“RLIMIT\u stack”是Linux内核中定义的堆栈的资源名称。下面是检索堆栈大小的简单程序:

#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
#include <errno.h>
using namespace std;

int main()
{
   struct rlimit sl;
   int returnVal = getrlimit(RLIMIT_STACK, &sl);
   if (returnVal == -1)
   {
      cout << "Error. errno: " << errno << endl;
   }
   else if (returnVal == 0)
   {
      cout << "stackLimit soft - max : " << sl.rlim_cur << " - " << sl.rlim_max << endl;
   }
}
郏经纬
2023-03-14

堆栈的最大大小是多少?

取决于实现。如今,一兆到几兆字节在PC上是典型的。

它是否适用于每个程序/计算机?

它通常固定在链接上,但标准没有定义它是。一些操作系统也可以在运行时限制堆栈(RLIMIT_STACK例如在linux上)。

可以增加吗?

这可能取决于实施情况。有关详细信息,请参阅链接器的文档。可能还有操作系统的文档和可执行文件格式。

您应该动态地分配这样的大型数组。

 类似资料:
  • 本文向大家介绍用C ++中的给定操作构造最大堆栈的程序,包括了用C ++中的给定操作构造最大堆栈的程序的使用技巧和注意事项,需要的朋友参考一下 假设我们要制作一个最大的堆栈,它支持以下操作- MaxStk() 这将构造一个最大堆栈的新实例 push(val) 将val插入堆栈 top() 从堆栈中获取最高的元素 max() 从堆栈中获取最大元素 pop() 从堆栈中删除并返回最上面的元素 popm

  • 问题内容: 我正在使用Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈中每个帧的大小? 问题答案: 您可以使用查询最大进程和堆栈大小。堆栈框架没有固定的尺寸。它取决于每个帧需要多少本地数据(即本地变量)。 要在命令行上执行此操作,可以使用ulimit。 如果要为正在运行的进程读取这些值,我不知道执行此操作的任何工具,但是查询/ proc文件系统很容易:

  • 主要内容:Stack 类中的属性,Stack 类中的方法在 C# 中,堆栈(Stack)类表示一个后进先出的对象集合,当您需要对项目进行后进先出的访问时,则可以使用堆栈。向堆栈中添加元素称为推入元素,从堆栈中移除元素称为弹出元素。 Stack 类中的属性 下表列出了 Stack 类中一些常用的属性: 属性 描述 Count 获取堆栈中包含的元素个数 IsSynchronized 判断是否同步对堆栈的访问(线程安全) SyncRoot 获取可用于同步对堆

  • 问题内容: 当我运行我的代码时,Node.js引发由过多的递归调用引起的异常。我试图将Node.js堆栈大小增加,但是Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将输出。是否有可能在不删除递归调用的情况下解决此问题? 问题答案: 您应该将递归函数调用包装到 , 要么 函数使node.js有机会清除堆栈。如果您不这样做,并且有很多循环没有任何 真正的 异步

  • 问题内容: 我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 有人有主意吗? http://plnkr.co/edit/aNcBcU?p=预览 检查Chrome中的调试控制台(例如),您将看到错误。冒犯的行是 通过以下方式在控制器上对scope.map进行“ $ watched” 问题答案: 这是因为您要比较对象是否相等,而不是参考。将您的声明更改为此:

  • 如果用户未登录,我尝试将用户重定向到“TrapPage”。 这是我的代码: 当我将函数requireAuth放在onEnter上时,控制台给我一个错误: 我是一个反应迟钝的人,请耐心点:) 我的代码有什么问题?