web-dev-qa-db-ja.com

sizeofは何をしますか?

sizeofの主な機能は何ですか(C++は初めてです)。例えば

_int k=7;
char t='Z';
_

sizeof (k)またはsizeof (int)sizeof (char)はどういう意味ですか?

16

sizeof(x) は、変数または型xが占有するメモリの量(バイト単位)を返します。変数の値とは関係ありません。

たとえば、任意の型Tの配列がある場合、その配列の要素間の距離は正確にsizeof(T)です。

_int a[10];
assert(&(a[0]) + sizeof(int) == &(a[1]));
_

変数で使用する場合、その変数の型で使用することと同じです。

_T x;
assert(sizeof(T) == sizeof(x));
_

経験則として、タイプが変更された場合に備えて、可能な場合は変数名を使用することをお勧めします。

_int x;
std::cout << "x uses " << sizeof(x) << " bytes." << std::endl
// If x is changed to a char, then the statement doesn't need to be changed.
// If we used sizeof(int) instead, we would need to change 2 lines of code
// instead of one.
_

ユーザー定義型で使用した場合でも、sizeofはその型のインスタンスが使用するメモリ量を返しますが、これはメンバーの合計と同じである必要はないことを指摘しておく価値があります。

_struct Foo { int a; char b; };
_

sizeof(int) + sizeof(char)は通常_5_ですが、多くのマシンでは、コンパイラが パッドアウトする必要があるため、sizeof(Foo)は_8_になる場合があります。 4バイト境界にあるように構造体。これは常に当てはまるとは限りません。マシンでsizeof(Foo)が5になる可能性は十分にありますが、それに依存することはできません。

54
Peter Alexander

ピーターアレクサンダーの答えに追加するには:sizeofは、値のサイズを生成するか、アドレス可能なメモリの最小単位として定義されているchar---charのサイズの倍数で入力します(Cによって)またはC++)特定のアーキテクチャー(およびC++では、少なくとも標準では8ビットのサイズ)。これは一般的に「バイト」(特定のアーキテクチャーの最小アドレス可能単位)が意味するものですが、明確にするのに害はありません。sizeof (char)の変動性について時々質問があります。もちろん、常に1

10
Derrick Turk

sizeof()は、渡された引数のサイズを返します。 sizeof()cppリファレンス

6
PeterK