为什么这段代码
#include <stdio.h>
int main(void) {
char big_array[10000000000];
printf("%d", sizeof(big_array));
return 0;
}
打印输出为
1410065408
而不是10000000000美元?
如果原因是堆栈内存不够大,那么在什么时候会出现运行时错误,而不是分配更小的内存?
为什么这段代码
#include <stdio.h>
int main(void) {
char big_array[10000000000];
printf("%d", sizeof(big_array));
return 0;
}
打印输出为
1410065408
而不是10000000000美元?
如果原因是堆栈内存不够大,那么在什么时候会出现运行时错误,而不是分配更小的内存?
打开警告!你应该得到一个警告,%d
不匹配你给它的size_t
参数.格式应该是"%zu\n"
.你得到的14%d
65408是%d
0000000模232,即截断为32位.
如果您真的try 对该数组进行use操作,它很可能会崩溃.(实际上,编译器正在优化未使用的array.)在堆栈上分配这些数组太多了.对于这么大的东西,你需要用malloc()
美元.