PHPのコピーオンライトについて Part1

最終更新: 2019年4月10日




今回は『PHPのコピーオンライトについて』について書きます。

この『コピーオンライト』と言うのは”変数の宣言・代入時にメモリを節約する仕組み”になります。 PHPの内部構造に軽く触れる内容ですが、「代入演算子が分かる」くらいの初心者の方でも何となく理解できると思います。maybe!!

4回に分けて書きます。お付き合い頂ければ幸いです。 Part1:変数同士の代入 Part2:オブジェクト同士の代入 Part3:COWの罠① Part4:COWの罠② Part5:まとめ

================ <変数同士の代入> 変数同士の代入時は、下記のようになっています。 ①コピー先にコピー元のデータは複製(コピー)されていない ②コピー元・コピー先のいずれかの変数が変更される直前に、$aのデータが$bに複製される

文字だけではわからないですネ! 少し具体的に書くと、下記のようになります。

——– 【コード】 $a = 123; $b = $a; $a = 456;

【説明】 ■1行目 ①$aのメモリ領域を確保 ②$aにデータ(123)を格納 ■2行目 ①$bのメモリ領域を確保 ②$bが$aを参照するように設定 ■3行目 ①$bに$aのデータをコピー ②$aのデータを456に変更 ——–

コピー元の変更が行われる直前(3行目)まで『変数$bは変数$aを参照している状態』になるのです! 同じデータが2つない分だけ、メモリが節約されることになりますね。

📷

変数が配列の場合、”どの要素が変更されても配列がCOWされる”ようになっています。 ※例外があります。詳しくはpart2以降で書きます

================

因みに、COWはオペレーティングシステム(OS)でも使用されています。

以上、『Part1:変数同士の代入』でした。 Part2へ続きます。

  • Grey Facebook Icon
  • Grey Twitter Icon
​株式会社エイト/東京都渋谷区 / 大阪 /  福岡

© 2018 Eight inc.