Programming Methodology 14
今回は、コンピュータの内部で変数やオブジェクトがどのように扱われているのかについて語られていました。
stack領域やheap領域について触れられた後、座標を表す二つのintでpointオブジェクトを生成する過程、二つのpointオブジェクトを持つlineオブジェクトを生成する過程を、heap/stack領域の広がりを図示しながら述べられていました。
- inside computer/memory
- bit : 0 or 1
- byte : 8 bits
- word : 4 bytes
- K : 1024 bytes
- M : 1024 K
- G : 1024 M
- Tera -> Peta -> Exa -> Zetta -> Yotta
- 人類がこれまでに話した言葉は推定5ExaBytes
- 16進数(Hexadecimal)
- メモリのセルは、それぞれアドレスを持っている
- 一つのセルは1byte(8bits)
- memory location -> 16進数で表す
- variableやmethodやobjectの情報はどのようにメモリへ配置されるのか?
- static variable/constant -> special
- dynamic variable(newで生成されるオブジェクト) -> heap
- local variable/parameters -> stack
- javaでは、memoryをfreeする必要がない
- heapとstackはメモリの両サイドから拡大していく(low address/high address)
- int -> 4 bytes
- char -> 2 bytes
- stack領域のlocal variableのセルには、heap領域にあるオブジェクト実体のアドレスが配置されている
- int/booleanはnewされない -> stack領域に実体が配置される
- methodの処理が終わったら、stackに積まれた領域はfreeされる
- ある変数を他の変数に代入する -> pointerがコピーされるだけで、実体は一つのまま