"c-like"
言語用のコンパイラを作成しています。現在、コンパイラはローカルスコープの配列をサポートしています。配列の各要素は、ブラケット表記a[0], a[1],...
を使用してアクセスできます。このデータ構造をサポートするために、現在のスコープ内のシンボル、および次に利用可能なメモリ空間のアドレスを追跡するためにシンボルテーブルが使用される。例えばにアクセスするために:スタックの実装を使用してcコンパイラ:配列を関数パラメータとして
int a[5]; int b;
、及び4バイト整列されたメモリを所与:実証するために、以下のコードを検討要素a[1]
は、私は、シンボルテーブルは、「A」の各個別要素のアドレスを記憶していない
element = ((index+1) * 4) + a.Address; // a.Address is the address of a, which is stored in the symbol table, and index is 1 in this case.
によるメモリ位置を計算し、各シンボルのシンボルと、のアドレスのみ、次のメモリアドレス。
私は、C言語がローカルスコープの配列に対してスタックベースの実装を使用していると仮定しています。しかし、C言語は関数のパラメータとしてローカル配列をどのように渡すのですか?
foo(int[] a) {}
Cコンパイラは、上記の配列を渡すために、ヒープまたはスタックを使用しますか?
なぜ 'index + 1'ですか? 'a [0]'は 'a'が指しているところとまったく同じであるとは思わない? – Shahbaz
@Shahbaz:そうです、その計算は解説のためのものです---私の実際のコードではなく---正しいものではありません。そう、aは確かにa [0]です。 – dnbwise
興味がある場合は、私の答えにあなたの問題に関するコメントを追加しました。 – Shahbaz