7

どのように決定されますか?これはコンパイラ/アーキテクチャ/ホスト システムに依存しますか?

例:

int array[0x8000000000000000]; 

x86_64 ビット システムのこの行の場合、GCC は次のように出力します。

Error "size of array 'array' is too large".
4

1 に答える 1

18

int array[SIZE]静的配列とは、固定長配列 (動的に割り当てられずに静的に割り当てられたもの) を意味すると思います。配列サイズの制限は、宣言された配列のスコープに依存する必要があります。

  • 配列をローカル スコープ (何らかのルーチン内) で宣言した場合、サイズ制限はスタック サイズによって決まります。
  • gcc が Linux で実行されている場合、スタック サイズは環境変数によって決まります。ulimit -aスタック サイズを表示およびulimit -s STACK_SIZE変更するために使用します。
  • gcc が Windows (MinGW など) で実行されている場合、スタック サイズは gcc -Wl,--stack, STACK_SIZE で指定できます。
  • グローバル スコープで配列を宣言した場合、配列は DATA または BSS セクションに格納されます (それぞれ、配列が初期化されているか初期化されていないかに基づいて)。DATA および BSS セクションのサイズは、基盤となる OS によって決まります。
  • 配列を静的スコープ ( など) で宣言した場合もstatic int array[SIZE]、配列は DATA または BSS セクションに格納されます (配列がそれぞれ初期化されているか初期化されていないかに基づいて)。DATA および BSS セクションのサイズは、基盤となる OS によって決まります。
于 2013-08-22T05:23:17.170 に答える