Laa*_*vaa 3 c struct memory-management structure
我有以下结构.在侧面计算尺寸的地方.填充后结构的大小应为30Bytes.但是大小是28.结构尺寸28如何?
#include <stdio.h>
struct a
{
char t; //1 byte+7 padding byte Total = 8bytes
double d; //8 bytes Total = 16bytes
short s; //2 bytes Total = 18Bytes
char arr[12];//12 bytes 8+8+4+12=32. Total = 30Bytes
};
int main(void)
{
printf("%d",sizeof(struct a)); // O/p = 28bytes
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以offsetof用来知道每个结构成员后的实际填充:
#include <stddef.h>
printf("Padding after t: %zu\n",
offsetof(struct a, d) - sizeof (((struct a *) 0)->t));
printf("Padding after d: %zu\n",
offsetof(struct a, s) - offsetof(struct a, d)
- sizeof (((struct a *) 0)->d));
printf("Padding after s: %zu\n",
offsetof(struct a, arr) - offsetof(struct a, s)
- sizeof (((struct a *) 0)->s));
printf("Padding after arr: %zu\n",
sizeof(struct a) - offsetof(struct a, arr)
- sizeof (((struct a *) 0)->arr));
Run Code Online (Sandbox Code Playgroud)
正如R.所写,你可能在一个32-bit系统,其中对齐double是4个字节而不是8个字节.