なぜ出力は8
?
そうじゃないsizeof(int)+sizeof(char) = 5
?
class CBase
{
int a;
char p;
};
int main() {
cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
getchar();
} ///:~
なぜ出力は8
?
そうじゃないsizeof(int)+sizeof(char) = 5
?
class CBase
{
int a;
char p;
};
int main() {
cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
getchar();
} ///:~
メモリは通常、パフォーマンスを向上させるためにコンパイラによって調整されます。そのため、クラスまたは構造体は、その部分の合計よりも多くのメモリ領域を必要とする場合があります。
コンパイラ / ランタイムが 8 バイト境界に位置合わせされているように見えます。これは、コンパイラまたはランタイム スイッチによって変更できる場合があります。たとえば、AIX では、C++ のメモリ割り当てが 16 バイトにアラインされているため、より多くのメモリを使用する可能性があります。
この調整を行わないために、実行時にこれを回避する方法があります (アプリが VMX を使用できないという欠点があります)。アプリケーションを実行する前に、この環境変数をアプリケーションに設定するだけです。
export LIBCPP_NOVMX=1