我需要静态定义一个大小为12884901888的静态数组(在* .h中)。
unsigned char sram[12884901888]; //All of my code is C.
以上声明会出错并且不起作用。
因为数组声明中使用的常量是unsigned int。但是我需要使用的常量(12884901888)大于unsigned int limit。
如何定义上面的数组,大小为12884901888?
谢谢。
-AD
P.S。我知道很多人会说,优化这个庞大的数组大小,但我需要使用相同的特定于我的情况。
答案 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文件。