-
Notifications
You must be signed in to change notification settings - Fork 0
Memory Structure
skyrabbit edited this page May 6, 2020
·
6 revisions
原則的に変更が不可能なメモリ領域
- テキスト(命令列)
- データ(静的領域)
や、領域制限のない
- スタック(関数領域)
- ヒープ(動的領域)
および、個数制限のない
- レジスタ
を持つ(実際には実行環境による物理的制限が存在する)。特別なレジスタとして
- スタックポインタ(スタックの先頭)
- ベースポインタ(引数とローカル変数の先頭) を持つ
上で説明したレジスタはvirtual register(vRegister)であり、native register(nRegister)に割り当てられているわけではない。が、アドレスは固定なのでキャッシュ上にある(可能性が高い)と思う。vStackやvHeapはC++のstd::vectorを利用しているので要素が増えて容量を超えた時、メモリの再確保が起きうる。アドレスは可変なのでキャッシュ上にない*(可能性が高い)と思う。ゆえにvRegisterは一般にvStackやvHeapより高速にアクセスできる(はずである)。ただし、vRegisterが大きいとき一部がキャッシュ上にないことはありうるし、逆にvStackやvHeapが小さい時全部がキャッシュ上にあることもありうる。
1から順に位として使う(?)