问题描述
为什么要填充的概念,只有当有一个结构的多个成员,它为什么时,有一个单一的基本数据类型的成员?包括
Why the concept of padding is added only when there are multiple members of a structure and why is it not included when there is a single basic data type member ?
如果我们考虑在32位机器上
if we consider on a 32bit machine
struct
{
char a;
} Y;
有没有填充和sizeofÿ涉及到1个字节。
There is no padding and sizeof Y comes to 1 byte .
如果我们考虑这个结构
struct
{
char a;
int b;
} X;
sizeof的X将是8个字节。
Sizeof X will be 8bytes .
我的问题是
为什么加入填充在第二种情况下?如果它是由4字节中的倍数块正常读取数据,那么为什么会出现在第一种情况下没有填充机器的有效访问?
My question isWhy was padding adding in the second case ? If it is for efficient access by the machine which normally reads data in blocks of multiples of 4bytes then why was there no padding in the first case ?
推荐答案
填充是在第二种情况下添加,因为,你的机器上,一个 INT
对齐到4个字节。因此,它必须居住在该整除4的地址。
Padding is added in the second case because, on your machine, an int
is aligned to 4 bytes. So it has to reside at an address that is divisible to 4.
0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B
a b b b b
如果不加填充,则 INT
成员起始地址 0×05
,这是不对的。随着3中添加填充字节:
If no padding is added, the int
member starts at address 0x05
, which is wrong. With 3 added padding bytes:
0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B
a | padding | b b b b
现在的 INT
是 0×08
,这是确定。
这篇关于为什么增加了结构的多个数据成员,而不是单个成员填充?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!