KDOC 192: 『Write Great Code Vol.1』

この文書のステータス

  • 作成
    • <署名>
  • レビュー
    • <署名>

概要

Write Great Code〈Vol.1〉は、低レイヤからよいコードを書く方法についての本。

メモ

  • BCD(Binary-Coded Decimal)は、10進数の値を2進表現でコード化したものである。BCDはデータをそれほど効率的に格納できない。重要な計算が、しばしば10進ベースの演算を使って実行されていた。特定の計算では正確な結果が得られるが、2進表現のほうがより正確に計算できることがほとんどである。このため最近のコンピュータプログラムで、すべての値(10進値を含めて)を2進形式で表現している、という(p32)
  • 数値、文字列の変換にはコストがかかる、という(p20)
  • 高水準言語の中には、パックされたデータのサポートが標準で組み込まれているものがある。たとえば、C言語では次のような構造体を定義できる(p59)
struct {
  unsigned bits0_3 :4;
  unsigned bits4_11 :8;
  unsigned bits12_15 :4;
  unsigned bits16_23 :8;
  unsigned bits24_31 :8;
} packedData;

  • 浮動小数点計算の正確性を高めるには、計算時に追加の桁を使う必要がある。この追加の桁をガード桁という(p67)
  • 浮動小数点同士の比較は危険。2進数の浮動小数点形式では、数学的に同じ結果を返す2つの計算の最下位ビットが異なる場合がある。代数的には等しくても、等式としてそのまま比較すると等しくならないことがある(p69)
  • 浮動小数点形式も、当然2進表現で保存されている。どのような形式で保存するかによって、計算コストや容量コストが変わってくる
  • Microsoft Windowsは内部的にUnicodeを使っている。そのためシステムコールにはASCII文字列を渡すよりもUnicode文字列を渡したほうが実行スピードが早くなる(p105)
  • ゼロ終端文字列、長さ接頭辞付き文字列のメリットデメリット(p107)
  • 長さ接頭辞付き文字列では、長さを示す接頭辞が文字列内の0の位置にある。文字列の最初の文字が文字列の配列表現においてインデックス1ではじまる。これは、実世界での数え方と同じである(p108)
  • 説明用に新しい文字セットを定義していく。同じ文字の範囲だとしても、並べ方によってソートや比較の速度、人の扱いやすさに影響が出る
  • 6章 メモリの構成とアクセス
  • アドレスの信号線が1本ある場合、プロセッサがアクセスできる一意のアドレスは0と1の2つ。n本ある場合、プロセッサは2のn乗の一意のアドレスにアクセスできる(p130)
  • システムはコントロールバスで読み出しと書き込みの2本の信号線を使ってデータフローの方向(CPU→メモリ、メモリ→CPU)を判断している(p131)
  • 多くのプロセッサでは、オブジェクトサイズの偶数倍のアドレスにあるオブジェクトにアクセスしないと例外が発生する(p138)
  • データをUSB経由で伝達するとき、標準形式はリトルエンディアンになる(p140)
  • 共用体内のすべてのフィールドが同じメモリ位置で重なり合っている
    • 共用体の性質を利用して、32ビットオブジェクトの個別のバイトにアクセスできるので、順番を並び替えられる
union{
  short unsigned i;
  short unsigned u;
  long  unsigned r;
} UNIONvar;
  • システムクロック
    • 動作周波数
    • システムはどうやって文を正しい順序で実行しているか
  • クロックエッジ
    • クロック信号がLからHに遷移する部分
  • ゼロウェイトステート
    • CPUは早い。メモリは比較して遅い。したがってCPUがメモリの処理を待って処理を停止する

関連

Backlinks