たとえば、このコードスニペットの結果は、コンパイラマシンまたはマシン実行可能ファイルのどちらのマシンで機能するかによって異なります。
sizeof(short int)
たとえば、このコードスニペットの結果は、コンパイラマシンまたはマシン実行可能ファイルのどちらのマシンで機能するかによって異なります。
sizeof(short int)
sizeofコンパイル時の演算子です。
プログラムを実行しているマシンによって異なります。ただし、値はコンパイル時に評価されます。したがって、コンパイラは(もちろん)コンパイルしているマシンを知る必要があります。
C99の時点で、sizeofは、オペランドが可変長配列である場合にのみ実行時に評価されます。たとえば、int a [b]であり、コンパイル時にbが不明です。この場合、sizeof(a)は実行時に評価され、その結果は配列全体のサイズ(バイト単位)、つまり配列内のすべての要素のサイズを組み合わせたものになります。配列内の要素の数を取得するには、を使用しますsizeof(a) / sizeof(b)。C99標準から:
sizeof演算子は、オペランドのサイズ(バイト単位)を生成します。これは、式または型の括弧で囲まれた名前の場合があります。サイズは、オペランドのタイプから決定されます。結果は整数です。オペランドの型が可変長配列型の場合、オペランドが評価されます。それ以外の場合、オペランドは評価されず、結果は整数定数になります。
これはすべて、ヒープに配列を割り当てた場合に得られるものとは異なることに注意してくださいint* a = new int[b]。その場合、sizeof(a)は、配列内の要素の数に関係なく、intへのポインターのサイズ(つまり、4バイトまたは8バイト)を提供します。
sizeofはコンパイル時に評価されますが、実行可能ファイルがコンパイル時と実行時の値が異なるマシンに移動された場合、実行可能ファイルは無効になります。
アノンはこれを説明しようとしましたが、それでも彼も他の誰もあなたのコンパイラがあなたがコンパイルしているプロセッサを示すフラグを持っていると述べていません。これは、コンパイル時にsizeofshortがどのように認識されるかです。
ただし、デスクトップコンパイラは、デスクトップと互換性のあるコードをプッシュする必要があると思います。OSはこれに関して特定の抽象化を提供していると思います。WindowsマシンはMacintoshマシンとはアーキテクチャが異なると聞いていますが。