• ベストアンサー

プログラムの原理について

プログラムはメモリ上どのように展開されているのか、宣言した変数はメモリにどう割り付けられるのか、変数を参照したり、変数に値を入れるときはどういう仕組みになっているのか等わかりやすく教えてください。お願いします。 また、宣言、定義などといった言葉に関しての質問になるのですが、定義は記憶が割り当てられていて、宣言は割り当てられていないと本にはあるのですが、これはメモリとスタックとの違いでよいのでしょうか?また、構造体は定義されていると書かれているのですが、その構造体の中のintの宣言は、定義になるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>8086などといったことを以前にも耳にしたことがあるのですが、どういった事なのでしょうか? 8086 というのは CPU の名前です。大雑把に言うと、 8086 → 80286 → 80386 ( ここで 32bit 化 ) → 486 → Pentium、Celeron、Xeon などなど・・・ のような感じで進歩してます。 Pentium や Celeron なども、MS-DOS で動かしているときは 8086 互換モードで動作すると思うので、本の通りに、実際に動かして勉強することができると思います。( Beep を鳴らすとかのポートの操作は WindowsNT/2000/XP ではできませんが。)

その他の回答 (2)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

例えば、 int i_glogal; int main() {  int i_auto;  static int i_static;  printf("&main=%p\n", &main);  printf("&i_global=%p\n", &i_global);  printf("&i_auto=%p\n", &i_auto);  printf("&i_static=%p\n", &i_static);  return 0; } のようなプログラムで、具体的な値を確認すると良いと思います。 VC++のようなデバッガを持っているのなら、実行時のメモリの内容なども参照できます。 C&C++の難関の一つであるポインタを理解するのにも役立つ方法です。

gogogo-n
質問者

お礼

ありがとうございます。さっそく実行してみたいと思います。今回の回答で、mainの関数のアドレスも表示できるということを、知ったのですが、構造体もアドレス表示できるのでしょうか? どうもありがとうございました。

回答No.1

アセンブラの本を読んで勉強されることをお薦めします。アセンブラが理解できると、C/C++ の動作も容易に想像がつきます。 Intel系の CPU なら 「はじめて読む8086―16ビット・コンピュータをやさしく語る」アスキーブックス・蒲地 輝尚 (著) なんかはお薦めです。 >これはメモリとスタックとの違いでよいのでしょうか? スタックもメモリですよ。 >構造体は定義されていると書かれているのですが、その構造体の中のintの宣言は、定義になるのでしょうか? 私はコンパイラの動作についてはよく知らないのですが、構造体は定義で記憶領域(メモリ)が割り当てられるのが本当だとすると、構造体の中の int も記憶領域が割り当てられていることになるので、定義ということになるのだと思います。 が、構造体を定義しただけではメモリは割り当てられないような気がします・・・。

gogogo-n
質問者

お礼

どうもありがとうございます。8086などといったことを以前にも耳にしたことがあるのですが、どういった事なのでしょうか?よろしければ、またよろしくお願いします。