Skip to content

Memory Structure

skyrabbit edited this page May 6, 2020 · 6 revisions

原則的に変更が不可能なメモリ領域

  • テキスト(命令列)
  • データ(静的領域)

や、領域制限のない

  • スタック(関数領域)
  • ヒープ(動的領域)

および、個数制限のない

  • レジスタ

を持つ(実際には実行環境による物理的制限が存在する)。特別なレジスタとして

  • スタックポインタ(スタックの先頭)
  • ベースポインタ(引数とローカル変数の先頭) を持つ

vRegister

上で説明したレジスタはvirtual register(vRegister)であり、native register(nRegister)に割り当てられているわけではない。が、アドレスは固定なのでキャッシュ上にある(可能性が高い)と思う。vStackやvHeapはC++のstd::vectorを利用しているので要素が増えて容量を超えた時、メモリの再確保が起きうる。アドレスは可変なのでキャッシュ上にない*(可能性が高い)と思う。ゆえにvRegisterは一般にvStackやvHeapより高速にアクセスできる(はずである)。ただし、vRegisterが大きいとき一部がキャッシュ上にないことはありうるし、逆にvStackやvHeapが小さい時全部がキャッシュ上にあることもありうる。

Segment Register(?)

1から順に位として使う(?)

Pointer Table(?)

Jump Table(?)

Clone this wiki locally