WGC1 第5章文字表現 5.2文字列



5.2.1 文字列の形式

  • 0で終わる文字列
  • 長さ接頭辞付文字列

文字列長1バイトとゼロ個以上の8ビット文字コード

  • 7ビット文字列
  • HLA文字列
> > > 最大長 > > > 長さ S t r i n g #0
  • 記述子ベース
  Hello World
  ↑    ↑    
  |   +--+--+
  |   |  |5  |
  |   +--+--+
 +--+--+  記述子#2
 |  |11|  
 +--+--+
  記述子#1

文字列といっても\0以外での表現の手法があるのね

5.2.2 文字列タイプ
  • 静的文字列
    char cString[256];
  • 擬似動的
    • 実行時に長さがシステムによって設定される文字列
    • mallocなどのメモリ管理関数を呼び出して文字列にメモリを割り当てる
  • 動的
    • 記述子ベース
    • 書き込み時のコピー
    • 文字列のコピーを作成して、それからそのコピーに対して変更を行う
    • ガーベージコレクション

5.2.3 文字列の参照カウント

  • 参照カウンタ

文字列のアドレスをポインタに代入するたびに、参照カウンタをインクリメント
手動で実装する場合には、ポインタを直接代入せずに、すべての文字列代入を
ポインタデータのコピーと参照データの更新を行う関数またはマクロで
呼び出しによって処理する

ポインタとカウンタを持つことによって逆にリークの可能性が高くなりそう
マルチスレッドでの排他はどうするんだろう。

5.2.4 Delphi/Kylix文字列
> > > 参照カウンタ > > > 長さ S t r i n g #0
Randall Hyde、鵜飼 文敏、まつもと ゆきひろ、後藤 正徳、トップスタジオ