メモリとアドレス、それは何ですか?


変数はどこですか?


コンピュータはどのようにして大量のデータを格納、インポートしますか?
int main()
{
	int var = 10;
    	var = 5;      
        printf("%d\n", var);
        return 0;
}
main関数で変数varがどこに格納されるかを宣言し、新しい値を指定するときに値をどのように変更するかを検討します.

メモリ?


main関数を実行する前に、メモリとは何か、その構造は何かを学びます.


お腹が空いたジェームズはチキンを注文して、配達員を待っています.1時間後、2時間後に配達員がまだ来ていないので、フライドチキン屋に電話して相談しました.「社長はそう言っています」「家の住所がないので、すべての家を訪れています~」
これは不可能な理由ですが、実際に住所がなければ上記の方法を使うべきです.

「メモリはホームアドレスと同じ役割を果たしています。」


main関数が呼び出されると、main関数にはメモリ値があります.0番メモリか100番メモリかもしれません.何のメモリがあるか分からない!いずれにしてもmain関数には何らかのメモリ、アドレスがあります.

メモリの長さはどうですか?



メモリには、上の図に示すように1 byteでリストされた構造があります.一部のアドレスにはos、プロセス、空きスペースがあります.これは空きスペースを使わない空間ではありません.
メモリが1バイト1バイト連続で存在することを知っています!では、main関数内部の変数がどのように格納されているかについて説明します.

これをアドレス空間(address space)と呼ぶ.プロセスが実行されると、関数と変数はスタック構造に格納され、メモリが動的に割り当てられている場合はスタック構造に格納されます.
一つ質問があります.では、スタック内部の変数や関数はメモリに格納されているので、いつでもアクセスできますか?
int main()
{
	int var = 1;
    
     	for(int i = 0; i < 3; i++)
    	{
    		int var = 2;
        	var++;
      
    	}
        printf("%d\n", var);
    
    	return 0;
}
上記の関数を実行すると、1と5のどちらが表示されますか?
main関数が開始され、int var=1に遭遇し、スタックにvar変数が格納されます.このとき、BP(base pointer)は対応するスタックフレームを指す.すなわち、var変数のアドレスを示す.また、SP(スタックポインタ)もvarを指す.
次に、for文に遭遇すると、新しい変数「var(for文)」もスタックメモリに格納されます.このとき、「var」を指すSPは、新たに記憶された「var(文案)」を指す.
今は複文が終わりました.SPはまた、繰り返し文の変数を示していますか?
いいえ.重複文が終了すると、スタックに格納された重複文データも消え、SPは元の指示の「var」を再び指す.
したがって,以上のプログラムの結果は1である.
BPはスタックフレームの先頭のアドレスを表し、SPはスタック構造の上部データのアドレスを表す.

整理する


cpuは変数を取得したり、関数を取得したり、領域変数を区別したりすることはできません.0と1を簡単に素早く読み込み、演算のみを行います.今入力した値は「var」から来たのか「var(for文案)」から来たのか分かりません.そのため、メモリは複雑なコンピュータの世界でマイルストーンの役割を果たしています.各変数に割り当てられたメモリ値により、インポートする必要があるデータを簡単にインポートできます.
メモリを理解しないと、コンピュータが分からないことになります.歩いて見て、よく理解しなければなりません!