C++ shared_ptrの非原子参照カウント:マイクロベンチマークによる意外な発見
2025-08-31

RustとC++のデータ構造を比較するマイクロベンチマークで、C++の`shared_ptr`に予期せぬ挙動が見つかりました。シングルスレッド環境では、GNU libstdc++は、`pthread_create`がインポートされていない場合、`shared_ptr`の参照カウントを非原子的に最適化します。このパフォーマンス最適化は、通常は安全ですが、動的にリンクされたライブラリが静的にリンクされたプログラムによってロードされるなど、まれなシナリオでは問題を引き起こす可能性があります。著者は他のC++実装(libcxxとVisual C++)を調査し、最終的にベンチマークで`pthread_create`を参照することでパフォーマンスの差異を解決しました。この発見は、低レベルの最適化の複雑さと、その潜在的な意図しない結果を浮き彫りにしています。
開発