プロが教える店舗&オフィスのセキュリティ対策術

変数の文字列を書き換えた時、メモリ上のアドレスは変わりますか?

zval構造体上のエントリ、及び、実際のメモリにおけるアドレス、その両方についてお教え下さい。

// 例
<?php
$a = 'aa';
$a = 'bb';
?>

知りたい点は、メモリの節約や実行速度の観点で何らかの工夫が可能なのかどうかという事を考えるためヒントです。

※「copy on write」に関しては理解しています。

A 回答 (1件)

C++辺りから転向してきた方でしょうか?


結論から先に言うなら「$aが参照しているメモリのアドレスなら変わる」だと思いますが、多分C++やCのポインタ構造を基準にすると絶対語弊があります。
変数管理回りを知りたいなら、参照URLにあるカテゴリ「PHP変数管理を理解する」などが参考になるかと。

PHPはメモリ節約などはあんまり考えなくても良いように設計されています。
ある繰り返しの中でオブジェクトを毎回newするより一つのオブジェクトを使いまわす、程度の工夫はやった事ありますが、文字列管理レベルでは全く気にしたこと無いですね。
(最も、そのオブジェクトの管理を行う参考として上記の例を挙げられたのだとは思いますが。
バージョンで違いますが、PHP5以降ではclone演算子を使わないかぎり全て参照となるのでこの辺の話はさらに無縁なんですよね)

参考URL:http://www.cpa-lab.com/tech/

この回答への補足

回答ありがとうございます。
長らく気付きませんでして、申し訳ありませんでした。


> C++辺りから転向してきた方でしょうか?

COBOLとCとJavaをかじってからPHPに流れ着いた者です。


> 結論から先に言うなら「$aが参照しているメモリのアドレスなら変わる」だと思います

PHPでメモリのアドレスと言っても、ちょっとトンチンカンだったかもしれませんね。
スミマセン。

JavaですとStringに対してStringBufferのように、追記に配慮されたクラスが
ありますが、PHPではどうしたもんかと思ったのがそもそもです。


> 変数管理回りを知りたいなら、参照URLにあるカテゴリ「PHP変数管理を理解する」などが参考になるかと。

そちらのサイト、質問をした当時、読んでました。
が、質問させて頂いた点は分からず・・・。

補足日時:2011/06/24 01:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!