主にCとC++において、sizeofは、データ型の大きさを求める単項の演算子である。sizeofは原則としてコンパイル時計算される演算子で、式もしくは括弧でくくった型指定子を与えるとその大きさをバイト単位で返す。これは組み込みの数値型(整数型や浮動小数点数型)、列挙型、ポインタ型、利用者定義の複合データ型(構造体、共用体、C++のクラス)まで、ほぼ全てのデータ型に対して使用できる。
必要性
多くのプログラムで、データ型の大きさがわかると便利な状況がある。最もよくある例としては標準Cライブラリのmallocなどによる動的メモリ確保が挙げられる。組込型の大きさは処理系定義となっており、厳密な大きさはsizeof (char)が1であることを除いて標準に定められていない。次の例では10個の要素を持つint型の配列を格納するのに十分なメモリを確保しようとしている。(処理系に依存したコードを書くつもりでなければ)int型の正確な大きさはわからないのでsizeofが必要となる。
このコードで、mallocは確保したメモリ領域へのポインタを返すが、その大きさはちょうどint型10個分になる。
一般的に、CとC++で型の大きさを仮定するのは安全でない。標準規格でもchar以外の型がメモリ上で何バイト占めるかを規定していない。たとえば、16ビットシステムでのint型の大きさは通例2バイトであるが、大半の32ビットシステムではint型の大きさは4バイトである。また、構造体や共用体ではアライメントもあり、ますます正確な大きさを求めるのは困難となる。そのようなこともあり、移植性の高いプログラムを書くには型の大きさを求めるためにsizeofを使用することが推奨されている。
CとC++…