K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2182] Re:汎整数拡張について
投稿者:(ぱ)こと管理人
2019/08/11 01:20:26

『CプログラミングFAQ』は、持ってたはずなのですが、どこを探しても見当たらない…… >①汎整数拡張により、char型やshort型は、値を取り出す時に32ビットに変換されるので、 >int型より処理時間がかかったり、int型より実行ファイルが増大したりするのでしょうか? この手の性能問題は私は全然詳しくないのですが(アプリケーションプログラマですので…)、 今時のCPUを相手に、どちらが良いとか悪いとかそう一概に言えるものではないと思っています。 たとえば先のchar_test.sとint_test.sをそれぞれGAS(GNU assembler)にかけてみると、 movsblの命令長はmovlよりも確かに長いのですが、int int_var = 5; の「5」が 32ビット幅になるので、結局のところ実効形式のサイズとしてはint_test.sの方が 微増しているようです。 char_test.s 17 0008 C645FF05 movb $5, -1(%rbp) 18 000c 0FBE45FF movsbl -1(%rbp), %eax 19 0010 89C6 movl %eax, %esi int_test.s 17 0008 C745FC05 movl $5, -4(%rbp) 17 000000 18 000f 8B45FC movl -4(%rbp), %eax 19 0012 89C6 movl %eax, %esi 特に配列なら、主記憶は十分にあっても、今時キャッシュに乗らないと性能は出ないので、 小さな型を使った方が早いケースはあるかもしれません。 配列でないなら、どちらにしても、そう大差があるとは思えませんが。 >②汎整数拡張があるので、char型やshort型を使わずに、int型を使った方が良いのでしょうか? 配列でないスカラの変数であれば、たとえば1バイト文字しか入らないとわかっていても、 私ならintを使います。「ポインタ完全制覇」にも書きましたが、getchar()の 戻り値やputchar()の引数も、実際intですし。
[この投稿を含むスレッドを表示] [この投稿を削除]