c/c++语言开发共享C中允许的最大静态数组大小是多少?

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

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

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

    你的大多数问题都得到了回答,但只是给出一个让我的生活更轻松的答案:

    定性地,非动态分配的数组的最大大小取决于您拥有的RAM量。 它也取决于数组的类型,例如int可能是4个字节,而double可能是8个字节(它们也是系统相关的),因此你将能够拥有一个数量为元素数量加倍的数组使用int而不是double

    说到这一点,并记住,有时数字确实很重要,这里有一个非常noobish代码片段,以帮助您提取系统中的最大数字。

     #include  #include  #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]); } } 

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

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

    不, static数组存储在静态存储区域中。 自动的(即在函数内部声明的,没有static存储指定符)在堆栈上分配。

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

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

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

    实际上,它取决于您使用的平台的C编译器。

    例如,甚至有一些系统没有真正的堆栈,因此递归不起作用。

    静态数组被编译为带指针的连续存储区。 指针的大小可能是两个或四个字节(或者甚至在异国平台上只有一个)。

    有些平台使用具有“近”和“远”指针的存储页面,这些指针的大小(当然还有速度)不同。 因此可能是表示数组和对象的指针需要适合同一个内存页面的情况。

    在嵌入式系统上,静态数据通常被收集在存储区中,稍后将由只读存储器表示。 所以你的arrays必须适合那里。

    在运行任意应用程序的平台上,如果上述情况都不适用,则RAM是限制因素。

      以上就是c/c++开发分享C中允许的最大静态数组大小是多少?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560144.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐