定义大于unsigned int limit的大型数组

时间:2009-06-16 08:43:46

标签: c arrays declaration

我需要静态定义一个大小为12884901888的静态数组(在* .h中)。

unsigned char sram[12884901888]; //All of my code is C.

以上声明会出错并且不起作用。

因为数组声明中使用的常量是unsigned int。但是我需要使用的常量(12884901888)大于unsigned int limit。

如何定义上面的数组,大小为12884901888?

谢谢。

-AD

P.S。我知道很多人会说,优化这个庞大的数组大小,但我需要使用相同的特定于我的情况。

3 个答案:

答案 0 :(得分:2)

使数组维度为无符号长整数。

unsigned char sram[12884901888ULL];

答案 1 :(得分:2)

这适用于嵌入式微控制器吗?你经常会得到类似的东西:

#define sram (*((unsigned char (*)[1]) 0))

除非您的编译器实现边界检查,否则数组大小无关紧要。在任何情况下,您都不希望编译器尝试保留12884901888字节,因为链接将失败。

答案 2 :(得分:0)

将12884901888转换为十六进制给出:0x3-0000-0000 (我将每组16位分开)

换句话说,这个无符号字节数组需要3次4 Gig 编译器应该为此生成34位地址指针

我同意finnw,你不需要告诉编译器数组的大小。如果确实指定了大小,则会获得模块的大型OBJ文件以及最终可执行文件的大型ELF / EXE文件。