メモリ
固定幅のセルが連続して並んでいる
各セルは、ワード、ロケーションとも呼ばれる
各ワードはユニークなアドレスを持つ
ワードのサイズはコンピュータによって異なる
8bits, 16, 24, 32 or 64bits
コンピュータによってはワードアドレスの代わりにバイトアドレスを使用するものもある
メモリセグメント
CPUにとってはランダムアクセス可能な巨大なバイトの配列のようなもの
CPUが実行するプログラム、そのプログラムが読み書きするデータはどちらもメモリに入っている
もう少し厳密に言えばメモリの中のスタック上にプログラムがある(?)
CPUがスタックから命令を取るためにはメモリにアクセスする必要がある
そしてこの操作は頻繁におこるので、一回が遅いとめっちゃ遅くなる
これは実際結構速いがもっと早くするためにCPUの内部の記憶領域であるレジスタにデータを保存する
スタックポインタとかもレジスタ上にある
加算するときは2つの値はレジスタ上にあり、その結果もレジスタに入れる
現在実行中の命令のアドレスを保持している
↑プログラムカウンタレジスタ(CP)、インストラクションポインタ(IP)と呼ぶ
RAM
参照の局所性
キャッシュメモリ
格納されるもの
「ノイマン型コンピュータのメモリに格納されるもの」って説明だけどそれ以外もあるのかなmrsekut.icon
データ項目
データメモリへ
変数、配列、オブジェクトなどのデータをバイナリ化したものが入ってる
プログラミング命令
命令メモリへ
コマンドをバイナリ化したものが入ってる
ここから命令をフェッチして、その命令をデコード(解読)して、実行する
メモリ管理
メモリリーク
キャッシュメモリ
Memzoom
https://justine.storage.googleapis.com/memzoom/index.html
メモリの分布を視覚化できる
参考
『Writing An Compiler In Go』
https://qiita.com/tkdn/items/ea4f034e0d661def244a
jsのメモリ
https://zenn.dev/rita0222/articles/e6ff75245d79b5
良さそうなシリーズ