私の不思議を定義するために、私はそれが一例と素晴らしいことだと思いますが:名前はどのように関連付けられたメモリアドレスで記憶されていますか?
変数xが2の初期値を使用して宣言し、グローバルスコープを持っている
int x = 2;
ので、その変数xにはグローバルスコープがあり、どこでも見ることができます。つまり、コンパイラはメモリアドレスを何とか思い出す必要があります。とにかく、Xは、その後、「BLA」
void bla() { x = 5; }
ので、コンパイラ(このすべてを扱うかわからないが)、「X」は、この名前を覚えているし、何とかに属しているメモリアドレスを知ることができると呼ばれる特定の機能から変更されました一緒に属し
- どのコンパイラ(これについてはまだわからないが)どのような名前/識別子とメモリアドレスを覚えていない:名X ...
だから私の質問はありますか?この情報はどこに保存されていますか?メモリアドレスとしても保存されていますか?
ありがとう!私は本当に何かをあいまいにしないようにしましたが、まだ混乱していると思われる場合は、コメントしてください。
C++標準で定義されたメカニズムはありません。各コンパイラは必要な変数を自由に覚えています。一般的に、各ネストされたスコープと各シンボルの意味を追跡するために、ある種のマップリストを使用します。プログラマが生のメモリアドレスを書いたとしてもそれほど速くはありません。実際、人間はこの種の作業でコンパイラよりもずっと遅くなるでしょう。 – cdhowie
これは、遭遇したすべての変数をある種の内部マップに埋め込むだけです。 – ForceBru
最初に、デバッグのために人々が使用する以外は、出力オブジェクトファイルに変数名が存在しないことを理解してください。次に、リンカーが何をしているのかを理解する必要があります。それ以外の場合は、私には簡単で明白です。あなたが解決しようとしている特定の問題を説明することができれば、本当に役に立ちます。 – user34660