← SEARCHABLE ARCHIVE
C / C++ · 2026-08-15

C++ 基礎からマスターまで — 第23回

ビルド、テスト、Sanitizer、プロファイリングでマスター課題を完成させる

INTERACTIVE READING MODE →

本ブログの記事は、講義を目的として作成しています。 内容に誤りが含まれる可能性があるため、対象コンパイラと標準ライブラリの資料も確認してください。

マスター段階とは高度な構文を並べることではなく、要件、寿命、失敗、性能を再現可能な証拠で説明できることです。最終課題では非同期リソースストリーミングを構築します。

Capstone の契約

request → 重複排除 → file read → decode → GPU upload → cache
                    │          │             │
               cancel/error worker pool   main-thread 境界
  • 同じリソースキーへの同時要求は一つの処理を共有する。
  • すべての待機者が cancel したら不要な処理を止める。
  • file bytes、decode buffer、GPU object の所有者を明確にする。
  • worker 終了後に callback が破棄済み状態へ触れない。
  • エラー分類と再試行可能性を保持する。
  • 代表 workload で時間、メモリ、allocation 目標を測る。

依存方向を内側へ向ける

include/streaming/     公開契約、handle、エラー型
src/core/              状態機械と重複排除
src/io/                file-system adapter
src/decode/            image-decoder adapter
src/gpu/               render-thread adapter
tests/                 unit、integration、race test
benchmarks/            再現可能 workload

Core は graphics API や file system に直接依存せず、小さな interface や制約付き型を受け取ります。テストでは順序を制御できる fake を注入します。

Header 内の inline 関数とテンプレートは全 translation unit で等価な定義を持つ必要があります。公開 object layout や virtual 関数順序の変更は ABI を壊し得るため、shared library 境界には version と rebuild 方針が必要です。

ツールで失敗を再現する

-fsanitize=address,undefined -fno-omit-frame-pointer
-fsanitize=thread

AddressSanitizer は寿命・境界エラー、UndefinedBehaviorSanitizer は複数の undefined behavior、ThreadSanitizer は data race の検出を助けます。ASan と TSan は通常別ビルドで使い、platform 対応も確認します。

必須の失敗テストには空・破損ファイル、cancel と完了の競合、重複要求、worker 終了、allocator 枯渇を含めます。sleep ではなく barrier、fake executor、制御可能 callback で順序を固定します。

Profile で仮説を検証する

CPU、OS、コンパイラと option、入力、command、反復数、生データを記録します。平均だけでなく p50/p95 latency、peak memory、allocation 数、throughput を確認します。

Profile から一つの bottleneck を選び、一度に一要素だけ変更して正確性と資源を再比較します。std::move、custom allocator、lock-free 構造には証拠が必要です。

完了条件

  • 所有権と thread affinity を図で説明する。
  • 各処理に成功、失敗、cancel、shutdown 経路がある。
  • 自動テストと Sanitizer で race と寿命エラーを検査する。
  • clean environment から configure、build、test を再現する。
  • 前後の数値、却下案、制限を ADR に残す。

C++ のマスターとは言語の全機能を暗記することではありません。型で値と資源の寿命を表現し、並行処理と失敗境界を制御し、コンパイラ、テスト、Sanitizer、profiler の証拠から設計を直し続ける能力です。