3

サイズが 12884901888 のような配列を静的に (*.h) ファイルで定義する必要があります。

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

上記の宣言はエラーになり、機能しません。

配列宣言で使用される定数は unsigned int であるためです。しかし、使用する必要がある定数 (12884901888) は unsigned int の制限よりも大きくなっています。

上記のようにサイズ 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 を 16 進数に変換すると、次のようになります: 0x3-0000-0000 (16 ビットの各グループを分離しました)

つまり、この符号なしバイトの配列には 4 ギガの 3 倍が必要です コンパイラは、これが機能するために 34 ビットのアドレス ポインタを生成することになっています

私はfinnwに同意します。コンパイラに配列のサイズを伝える必要はありません。サイズを指定すると、モジュールの OBJ ファイルが大きくなり、最終的な実行可能ファイルの ELF/EXE も同様に大きくなります。

于 2016-03-02T02:10:42.413 に答える