C++ を書くときに「内部」で何が起こるかを正確に理解するために、どのドキュメントをお勧めしますか?
これまでのところ、私は持っています:
- GNU C++ コンパイラのドキュメント (実際に何が起こるかを確認するには、これが良いと思いました)
- C++ ABI(?) 仕様
書籍:
- C++ オブジェクト モデルの内部
- マイヤーズ有効級数
C++ を書くときに「内部」で何が起こるかを正確に理解するために、どのドキュメントをお勧めしますか?
これまでのところ、私は持っています:
書籍:
アセンブラへのコンパイルを使用しg++ -fverbose-asm -S
ます。GCCの場合、および他のコンパイラの親族スイッチ。それは、「内部」に限りなく近いものです。
最初にx86アセンブリ命令セットと命令クロックのタイミングを学習して学びました。これを理解すると、コンパイラが実際にコードを何に変換しているかがわかり、コンパイラが何ができるか、何ができないかがわかります。そこから、特定のコードに興味がある場合は、コンパイラーからアセンブラー出力を取得し、さまざまなコーディング方法を試してみます。何年にもわたって、私はいくつかのことを発見しました... 1)コンパイラは最適化に非常に優れており、多くの場合、いくつかの異なる方法でコーディングしても、同じアセンブリ出力になります。2)インライン化の量に驚かされることがよくあります。コンパイラーはそうします、そして3)私はしばしばC++コードのほんの少しが大量のアセンブリ出力をもたらすことがあることに驚いています。したがって、多重継承C ++オブジェクトをコピーする場合は、それがどれほど高価であるかを理解し、オブジェクトデータを保護するための小さなユーティリティメソッドを書いているとき、そのツールがどれほど安価であるかを理解するでしょう。幸せな狩猟。
実際の内部を理解するには、G++ ソース コードに精通している必要があります。コンパイラ コードは、言語について多くのことを教えてくれます。
低レベルの理解のためには、最新の C++ 標準 (C++11) に精通している必要があります。