【发布时间】:2012-05-19 18:32:26
【问题描述】:
我在这里写了一些C代码,遇到了一个问题:
我有一个自定义类型的数组。我想为这个数组设置一个大小:
typedef struct reg Reg;
Reg myArray[958279];
当我运行我的程序时出现分段错误。
然后我尝试使用 malloc,它动态分配存储空间,令我惊讶的是它起作用了:
Reg *myArray = (Reg*)malloc(sizeof(Reg)*958279);
所以我假设静态形式的数组声明必须有一些大小限制。
在某处有没有提到这个事实?还是我对我的问题完全错了?
【问题讨论】:
-
第一个是栈分配,第二个是堆分配。堆栈分配非常快,但每个线程的堆栈大小有限(我的系统上为 8 MB,但我看到它低至 512 KB)。
-
你知道C语言的文档中提到过这个事实吗?
-
@JamesMcLaughlin:你怎么知道的?据我所知,第一个可能是静态分配... :-)
-
@KerrekSB 像你这样的聪明人是我发表评论而不是答案的原因。 ;-)
标签: c arrays allocation