3

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

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

上面的声明给出了错误并且不起作用。

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

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

谢谢你。

-广告

PS我知道很多人会说,优化那个巨大的数组大小,但由于某些特定于我的情况的原因,我需要使用相同的。

4

3 回答 3

2

使数组维度为 unsigned long long。

unsigned char sram[12884901888ULL];
于 2009-06-16T08:52:55.420 回答
2

这适用于嵌入式微控制器吗?你经常可以逃脱类似的事情:

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

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

于 2009-06-16T08:53:58.240 回答
0

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

换句话说,这个无符号字节数组需要 3 乘以 4 Gig 编译器应该生成 34 位地址指针以使其工作

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

于 2016-03-02T02:10:42.413 回答