C 定义一个大于无符号整数限制的大数组
我需要静态地(在*.h文件中)定义一个大小为12884901888的数组C 定义一个大于无符号整数限制的大数组,c,arrays,declaration,C,Arrays,Declaration,我需要静态地(在*.h文件中)定义一个大小为12884901888的数组 unsigned char sram[12884901888]; //All of my code is C. 上面的声明给出了错误并且不起作用 因为数组声明中使用的常量是无符号整数。但是我需要使用的常量(12884901888)大于无符号整数限制 我如何定义上述大小为12884901888的数组 多谢各位 -广告 另外,我知道很多人会说,在这个庞大的数组大小上进行优化,但我需要使用相同的方法,因为我的情况特定于某些原因
unsigned char sram[12884901888]; //All of my code is C.
上面的声明给出了错误并且不起作用
因为数组声明中使用的常量是无符号整数。但是我需要使用的常量(12884901888)大于无符号整数限制
我如何定义上述大小为12884901888的数组
多谢各位
-广告
另外,我知道很多人会说,在这个庞大的数组大小上进行优化,但我需要使用相同的方法,因为我的情况特定于某些原因。将数组维度设置为无符号长
unsigned char sram[12884901888ULL];
这是嵌入式微控制器吗?您通常可以通过以下方式逃脱:
#define sram (*((unsigned char (*)[1]) 0))
除非编译器实现边界检查,否则数组大小无关紧要。在任何情况下,您都不希望编译器尝试保留12884901888字节,因为链接将失败。将12884901888转换为十六进制将给出:0x3-0000-0000 (I将每组16位分隔开) 换句话说,这个无符号字节数组需要3乘以4 Gig 编译器应该生成34位地址指针,以使其工作
我同意finnw的观点,你不需要告诉编译器数组的大小。如果确实指定了大小,则模块将获得一个大OBJ文件,最终可执行文件将获得类似的大ELF/EXE。取决于编译器。如果它先把长度转换成一个siZet,那么它就不能工作。你可能想考虑使用一个二维数组。我忘记了标准在本例中所说的,但我相当肯定(至少在C90中)固定大小的二维数组保证使用行指针布局。如果是这种情况,那么二维数组可以被视为一维数组(当然使用行指针布局“公式”)@finnw:你能解释一下你提到的宏sram是什么吗?某个指向数组的指针。。。?