WisdomSoft - for your serial experiences.

7.9 型のサイズ

値、または定義済みの型から、そのインスタンスを保存するために必要な記憶領域のサイズを取得するには sizeof 演算子を用います。

7.9.1 値のサイズを得る

どのような変数にも、構造体や共用体のインスタンスにも、値を保存するためのメモリ領域が割り当てられています。例えば int 型は 32 ビットコンピュータにおいて 4 バイトのメモリ領域を割り当てます。つまり int 型の変数を用いた場合、メモリを 4 バイト消費するということです。今ではメモリの大容量化によって、開発者が神経質に容量を気にする必要はなくなってきましたが、メモリはプログラミングにおいて重要な要素です。

C 言語では変数や型からサイズを取得する sizeof 演算子を使って型サイズを調べることができます。sizeof 演算子は指定した値のバイト数を返します。sizeof が返す整数値を使うことで、ポインタの演算や構造体の操作に応用できます。

sizeof 演算子
sizeof 

これによって、式で指定した変数や型のメモリサイズを取得することができます。sizeof 演算子で指定する式は、通常は何らかの識別子(変数名)となります。

コード1
#include <stdio.h>

int main() {
	char c;
	short si;
	int i;

	printf("char = %d : short = %d : int = %d\n" ,
		sizeof c , sizeof si , sizeof i
	);
	return 0;
}
実行結果
コード1 実行結果

コード1では、char 型の変数 c、short 型の変数 si、そして int 型の変数 i のサイズを sizeof 演算子で調べ、これを表示します。結果はシステムによって異なりますが、char のサイズは必ず 1 となるでしょう。もし 32 ビットコンピュータであれば int 型のサイズは 4 バイト、short は 2 バイトであることが想定されます。sizeof 演算子を用いることで、使っているシステムにおいて C 言語の単純型が何バイトのメモリを割り当てているのかを正確に調べることができます。

しかし、型のサイズを調べたいだけなのに、わざわざ使用しない変数を作成するのは無駄です。sizeof 演算子は式を与える以外に、括弧で囲んだ型を指定することも可能です。これによって、値ではなく型名からサイズを調べることができます。

sizeof 演算子
sizeof (型指定子)

型指定子は単純型だけではなく、構造体型や typedef 名を指定することも可能です。

コード2
#include <stdio.h>

typedef struct { int x , y; } Point;
typedef union {
	char c;
	short si;
	int i;
} Value;

int main() {
	printf("Point = %d : Value = %d\n" , sizeof(Point) , sizeof(Value));
	return 0;
}
実行結果
コード2 実行結果

コード2は、sizeof 演算子に型を指定しています。これによって、Point 構造体や Value 共用体のバイトサイズを取得することができます。Point 構造体は sizeof (int) * 2 に等しく、Value 共用体は最もサイズの大きいメンバ int に等しいサイズであることを確認することができるでしょう。