2
サンプルプログラムとその出力を示します。スタックメモリの割り当てと配置の問題
ここtypedef struct{
char name[30];
int empno;
int sal;
}empd, * empdPtr;
int main(){
int x = 1;
char y = 2;
int z = 3;
empd e;
empdPtr ep = &e;
printf("sizeof ep = %d e = %d \n",sizeof(ep),sizeof(e));
printf("Address of e = %u, ep = %u x = %u y = %u z = %u\n",&e,&ep,&x,&y,&z);
printf("Address of e.name = %u e.empno = %u e.sal = %u \n",&e.name,&e.empno,&e.sal);
return 0;
}
$ ./a.exe
sizeof ep = 4 e = 40
Address of e = 2289536, ep = 2289532 x = 2289596 y = 2289595 z = 2289588
Address of e.name = 2289536 e.empno = 2289568 e.sal = 2289572
& Eのアドレスとの間の差と& zは52であるが、40のバイトが十分であっても、コンパイラは12バイト以上を添加する理由はsizeof(e)は40ですか。?
コンパイラは構造体にもパディングを追加できます。 –
@Francisco確かにこのコンパイラはempd構造体がパックされていると38バイトを消費するので、これを行っています –
同じことについていくつか詳細を教えてください。 – Thangaraj