C中允许的最大静态数组大小是多少?

unl*_*101 6 c arrays stack max

在我的算法中,我知道使用静态数组,没有动态数组.但我有时会达到堆栈的极限.我是对的,静态数组是否存储到堆栈中?

哪个参数会影响一个C程序的最大堆栈大小?

是否存在影响最大阵列大小的系统参数?最大化没有.元素取决于数组类型?它取决于系统总RAM吗?或者每个C程序都有一个静态的最大堆栈大小?

das*_*ght 8

我是对的,静态数组是否存储到堆栈中?

不,static数组存储在静态存储区域中.该自动那些(即内部功能声明的,没有static存储指定符)被分配在栈上.

哪个参数会影响一个C程序的最大堆栈大小?

这取决于系统.在某些操作系统上,您可以以编程方式更改堆栈大小.

由于自动存储分配而耗尽堆栈空间是一个明确的迹象,您需要重新考虑您的内存策略:如果重新入侵不是问题,您应该在静态存储区域中分配缓冲区,或者使用最大的动态分配你的数组.


Geo*_*rge 1

你的大部分问题已经得到解答,但只是给出一个让我的生活变得更轻松的答案:

从本质上讲,非动态分配数组的最大大小取决于您拥有的 RAM 量。它还取决于数组的类型,例如 anint可能是 4 个字节,而 double 可能是 8 个字节(它们也取决于系统),因此如果您使用,您将能够拥有一个元素数量双倍的数组int代替double

话虽如此,但请记住,有时数字确实很重要,这里有一个非常菜鸟的代码片段,可以帮助您提取系统中的最大数字。

#include <stdio.h>
#include <stdlib.h>

#define UPPER_LIMIT 10000000000000 // a very big number

int main (int argc, const char * argv[])
{
    long int_size = sizeof(int);
    for (int i = 1; i < UPPER_LIMIT; i++)
    {
        int c[i];
        for (int j = 0; j < i; j++)
        {
            c[j] = j;
        }
        printf("You can set the array size at %d, which means %ld bytes. \n", c[i-1], int_size*c[i-1]);
    }    
}
Run Code Online (Sandbox Code Playgroud)

PS:可能需要一段时间才能达到系统的最大值并产生预期的分段错误,因此您可能需要将 的初始值更改i为更接近系统 RAM(以字节为单位)的值。