Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 定义一个大于无符号整数限制的大数组_C_Arrays_Declaration - Fatal编程技术网

C 定义一个大于无符号整数限制的大数组

C 定义一个大于无符号整数限制的大数组,c,arrays,declaration,C,Arrays,Declaration,我需要静态地(在*.h文件中)定义一个大小为12884901888的数组 unsigned char sram[12884901888]; //All of my code is C. 上面的声明给出了错误并且不起作用 因为数组声明中使用的常量是无符号整数。但是我需要使用的常量(12884901888)大于无符号整数限制 我如何定义上述大小为12884901888的数组 多谢各位 -广告 另外,我知道很多人会说,在这个庞大的数组大小上进行优化,但我需要使用相同的方法,因为我的情况特定于某些原因

我需要静态地(在*.h文件中)定义一个大小为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是什么吗?某个指向数组的指针。。。?