コピー2018.08.22今回もsizeコマンドです。苦手、というかまったく理解してなかった、コンパイル、リンク、加えてセクションって何者なのか。この辺りの苦手意識を克服するためしばらくsizeコマンドで遊んでみます。どこかにある書籍を読めば、難しく書いてあるんじゃないかと思うんです。gccのソース理解するとか。今の私のスキルでは、どちらの方法も辛いんです(いや、スキルがあったとしても難しい本は読みませんが)。サルでも分かるとか、10日で分かるとかいう本があれば読むんですが、頭の良い人が分かる本って、簡単なことを難しく書いてあるんですよね。使って覚えていこうと思います。闇雲に使っているうちに、だんだん分かってくるんじゃないかと思ってます。グローバル変数の定義だけのソースをコンパイルすると、どのセクションにも割り当たりませんでした。sizeコマンドの表示もオール0でしたね。グローバル変数がどこからも使用されないからだと思います。この変数をどこかで使えば、セクション確保されるのではないか、と考えました。こんなソースを思いつきます。tmp変数は、初期値がないためbssセクションに配置されるはずで、tmp2は、tmpのアドレスを初期値としているためdataセクションに配置されるはず。bssに配置されてません。main関数があるとどうでしょうか。変数定義がない場合の空main関数のみでビルド。このbssの数字を覚えておいて、次は変数定義ありでビルド。bssが、8から136Byteに増えました。コンパイルだけでなく、ビルド(リンク)まですると、bssセクションが確保されるってことでしょうか。次は、空のmainで、グローバル変数のextern定義のみ。これはmain関数でtmp変数を使用していないため、ビルドできます。bssが8になりました。次は、2つのファイルをリンクしてみます。main関数のあるソースにグローバル変数がある場合と全く同じになりました。関連記事9-1.ソース・ビルド・インストールgcc最適化(O2/O3)アセンブラ比較(その3)前回も前々回も、-O2と-O3の違いを確認しようとしましたが、アセンブラコードに差が出ませんでした。そもそもソースが-O3で最適化できるようになっていないのでしょう。前回の最後は、こんなソースになってましたね。三ツ星レストランのシェフが、レストランをクビになり、小学校の給食調理員になります。格闘技の中で相撲が一番強いのでは、と思えてきます。倒れない足腰、カッコいいですねえ。今回もアセンブラです。gccの最適化オプションはたくさんあります。今回は、-O、-O1、-O...9-1.ソース・ビルド・インストールアセンブラでエンディアン変換アセンブラでエンディアン変換してみます。32bitの変数aのエンディアン変換です。EAXとEBXレジスタを使います。1Byteのコピーから。コピーして8bitシフトします。...9-1.ソース・ビルド・インストールgccのソースはどこ(その1)gccのソースが読みたくなりました。ソースはどこでしょうか。引っ張れるでしょうか。なんか落ちてきました。ファイルは自動で解凍されます。展開されたディレクトリへ進んで中身をみてみます。email.ホーム9.ソース管理9-1.ソース・ビルド・インストールスポンサーリンク広告プロフィール管理人:takketeお仕事:システムエンジニア日々何か向上したくて、もがいています。Policyホーム検索トップサイドバースポンサーリンク広告プロフィール管理人:takketeお仕事:システムエンジニア日々何か向上したくて、もがいています。thanksタイトルとURLをコピーしました。