61. PHP の⽂字列はエンコード情報を持たないバイト列
添え字アクセスと ord() で 1 バイト分のデータを取り出す実
装が作れる
final class StringByteReader implements ByteReaderInterface
{
use ByteReaderDisableWriteAccessTrait;
public function offsetGet($offset): int
{
return ord($this->source[$offset]);
}
62. このインターフェースを通じて 32 ビットや 64 ビットの整数値
を取り出すクラスも作る
final class LittleEndianReader implements IntegerByteSequenceReader
{
public function read8(ByteReaderInterface $data, int $offset): int
{
return $data[$offset];
}
public function read16(ByteReaderInterface $data, int $offset): int
{
return ($data[$offset + 1] << 8) | $data[$offset];
}
public function read32(ByteReaderInterface $data, int $offset): int
{
return ($data[$offset + 3] << 24)
| ($data[$offset + 2] << 16)
| ($data[$offset + 1] << 8)
| $data[$offset];
}
95. C ⾔語側までトレースを取る
ptrace システムコールで対象プロセスの実⾏を⼀瞬⽌めれば
CPU 的な状態も取得できる
C プログラムのデバッグ⽤情報を格納する DWARF 形式を使う
両⽅使えば更に細かい C ⾔語側のトレースまで取れる筈
PHP コードのどの関数のどの⾏のどのオペコードを実装して
いるどの処理系内の C ⾔語関数が遅いのか
「なぜか echo に 7 秒かかる」等の性能調査や処理系⾃体の性能
改善に使えそう