一个非常大的数组的大小

问题描述 投票:0回答:1

为什么这段代码

#include <stdio.h>

int main(void) {
    char big_array[10000000000];
    printf("%d", sizeof(big_array));
    return 0;
}

将输出打印为

1410065408

而不是10000000000

如果原因是由于堆栈内存不够大,那么什么时候会出现运行时错误而不是分配较小的内存?

c stack sizeof
1个回答
1
投票

打开警告!您应该收到一条警告,指出

%d
与您提供的
size_t
参数不匹配。格式应为
"%zu\n"

如果您确实尝试使用该数组,它可能会崩溃。这对于在堆栈上分配来说太多了。对于这么大的东西,您需要使用

malloc()

© www.soinside.com 2019 - 2024. All rights reserved.