定义一个大小超过无符号整数限制的大数组

3

我需要在一个*.h文件中静态定义一个大小为12884901888的数组,例如:

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

上述声明会出错,无法正常工作。

因为数组声明中使用的常量是无符号整数。但我需要使用的常量(12884901888)大于无符号整数的限制。

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

谢谢。

-AD

P.S. 我知道很多人会说,优化这个巨大的数组大小,但出于某些特定原因,我需要使用相同的大小。


你可能想考虑使用二维数组。我忘记标准在这种情况下的规定,但我相当确定(至少在C90中),固定大小的二维数组保证使用行指针布局。如果是这种情况,则可以将二维数组视为一维数组(当然要使用行指针布局“公式”)。 - anon
3个回答

2
将数组维度改为无符号长整型(unsigned long long)。
unsigned char sram[12884901888ULL];

取决于编译器。如果它首先将长度转换为size_t,则无法工作。 - finnw

2

这是用于嵌入式微控制器吗?你通常可以使用以下方法:

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

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


@finnw:您能否详细解释一下宏SRAM是什么,您提到要声明的是指向数组的指针吗? - goldenmean

0

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

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

我同意finnw的观点,您不需要告诉编译器数组的大小。如果您指定了大小,模块将会生成一个大的OBJ文件,最终可执行文件也会变得非常大。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接