型のバイト数を調べる ― 2008年11月26日 02時15分13秒
異なったアーキテクチャやエンディアンを持つシステム間で、直接バイナリを交換するのには、全ての構造体の要素の大きさを完全に一致させる必要がある。
逆に言えば、エンディアン間の違いはバイトを入れ換えるしか無いが、OS やアーキテクチャなどを跨いで、構造体の内部構造を一致させることも可能だ。なるべく避けたい事態だが、時と場合によっては、必要になる。いちいち文字列に変換をしていたら、パフォーマンスが大幅に落ちるためだ。
以下のプログラムで、各型の大きさが調べられる。
#include <stdio.h>
int main(void)
{
printf("type\t\tbyte\n");
printf("void\t\t%zd\n", sizeof(void*));
printf("char\t\t%zd\n", sizeof(char));
printf("short\t\t%zd\n", sizeof(short));
printf("int\t\t%zd\n", sizeof(int));
printf("long\t\t%zd\n", sizeof(long));
printf("long long\t%zd\n", sizeof(long long));
printf("float\t\t%zd\n", sizeof(float));
printf("double\t\t%zd\n", sizeof(double));
printf("long double\t%zd\n", sizeof(long double));
return 0;
}
何の変哲も無いコードだが、一回づつ必要になる度に書くのも面倒だ。
コメント
_ (未記入) ― 2009年02月10日 02時13分18秒
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2008/11/26/3975831/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
#define PRINT_SIZE(ty) printf(#ty ": %d\n", sizeof(ty))
PRINT_SIZE(int);
PRINT_SIZE(long long);