首页 > 试题广场 >

在一个16位的机器,以下结构由于边界对齐浪费了多少空间()

[单选题]
在一个16位的机器,以下结构由于边界对齐浪费了多少空间()
struct{
     char a;
     int b;
     char c;
}
  • 8
  • 4
  • 6
  • 2
本题是16位机器,char型占1个字节,int型占2个字节。
结构体中字节对齐有两条规则:
  1. 数据成员自对齐,即数据成员起始地址为数据类型长度的整数倍,如该题int型b只能从0,2,4...等地址处开始放;
  2. 结构体总长度是结构体中有效对齐值的整数倍,有效对齐值,如该题没明确指出,则为最长数据成员(int b)长度的整数倍;
根据上面两条规则,画出内存示意图。根据规则1,int b从2处开始放,此时结构体总长度为(1 + 1 + 2 + 1 = 5);再根据规则2,结构体总长度应为2的整数倍,故应为6.描红的两个字节表示被浪费的。
参考http://blog.csdn.net/andy572633/article/details/7213465

发表于 2015-09-20 10:48:29 回复(10)
注意题目说是16位机器
char a [8][浪费]
int    b [16]
           [16]
char c [8][浪费]
因此,总共浪费了16位,就是2个字节
发表于 2015-09-19 11:26:07 回复(2)

16位机器,默认对齐字节偏移量是(16/8)=2的倍数,故实际分配内存情况为

char a 1字节

int b (1+2)字节,偏移量取min{2,2},取2,所以补一个字节就够

char c (1+1)字节 总大小为4的倍数所以加1

总共8字节,为了对齐用了2字节

编辑于 2015-09-22 21:43:39 回复(5)

原本是 1+2+1=4个字节,对齐之后 2+2+2=6,所以浪费2个字节

发表于 2020-02-13 19:17:45 回复(0)
看清题目,是在16位的机器上,所以默认是按2字节对齐。
发表于 2017-01-27 14:28:58 回复(0)
16机器按照两字节对齐。 所以char型占用一个字节,浪费一个字节。 int型字节占用四个字节,没有浪费字节。
发表于 2020-08-19 12:23:50 回复(0)
注意题目说是16位机器
char a [8][浪费]
int    b [16]
           [16]
char c [8][浪费]
因此,总共浪费了16位,就是2个字节
发表于 2020-02-21 16:23:33 回复(0)
这题目出错了吧?
整形占的空间应该是4字节啊与计算机16位或者32位无关,对齐也应该按4字节来,结果总共占了12字节,浪费了6字节
发表于 2017-05-09 21:14:22 回复(1)
注意是16位的机器
发表于 2016-05-28 11:05:15 回复(0)

如果按照2个字节对齐,结构体的大小调整如下:

cCopy Code
struct { char a; // 1字节 int b; // 4字节 char c; // 1字节 };

因为按照2个字节对齐,所以char类型的变量a和c都占用了2个字节的空间。而int类型的变量b本身已经按照4字节对齐。

结构体的大小为:2 + 4 + 2 = 8 字节。

因此,浪费的空间量为结构体大小减去成员大小之和,即 8 - (1 + 4 + 1) = 2 字节。

发表于 2023-10-31 10:56:05 回复(0)
16位以字节2对齐
发表于 2023-10-23 10:22:07 回复(0)
十六位机器 Int两字节
发表于 2023-08-28 23:19:22 回复(0)
本题是16位机器,char型占1个字节,int型占2个字节。
结构体中字节对齐有两条规则:
数据成员自对齐,即数据成员起始地址为数据类型长度的整数倍,如该题int型b只能从0,2,4...等地址处开始放;
结构体总长度是结构体中有效对齐值的整数倍,有效对齐值,如该题没明确指出,则为最长数据成员(int b)长度的整数倍;
根据上面两条规则,画出内存示意图。根据规则1,int b从2处开始放,此时结构体总长度为(1 + 1 + 2 + 1 = 5);再根据规则2,结构体总长度应为2的整数倍,故应为6.描红的两个字节表示被浪费的。
发表于 2021-11-30 09:06:24 回复(0)
c(艹) 16位
发表于 2021-07-21 22:24:34 回复(0)
不知道你们做没做过一道题 说是16位机器没有对齐规则。。。
发表于 2019-07-24 10:50:51 回复(0)
本题是16位机器,char型占1个字节,int型占2个字节。 结构体中字节对齐有两条规则: 数据成员自对齐,即数据成员起始地址为数据类型长度的整数倍,如该题int型b只能从0,2,4...等地址处开始放; 结构体总长度是结构体中有效对齐值的整数倍,有效对齐值,如该题没明确指出,则为最长数据成员(int b)长度的整数倍; 根据上面两条规则,画出内存示意图。根据规则1,int b从2处开始放,此时结构体总长度为(1 + 1 + 2 + 1 = 5);再根据规则2,结构体总长度应为2的整数倍,故应为6.描红的两个字节表示被浪费的。
发表于 2024-03-04 10:32:41 回复(0)
注意:每个成员对齐;结构体总长对齐(这条是否自动满足?)
发表于 2023-07-08 12:00:32 回复(0)
最后一个char怎么就成浪费了?
发表于 2023-05-12 22:00:18 回复(0)
C[一种植物] ,16位
发表于 2022-09-06 22:15:51 回复(0)
数据成员自对齐,即数据成员起始地址为数据类型长度的整数倍,如该题int型b只能从0,2,4...等地址处开始放; 结构体总长度是结构体中有效对齐值的整数倍,有效对齐值,如该题没明确指出,则为最长数据成员(int b)长度的整数倍; 根据上面两条规则,画出内存示意图。根据规则1,int b从2处开始放,此时结构体总长度为(1 + 1 + 2 + 1 = 5);再根据规则2,结构体总长度应为2的整数倍,故应为6.描红的两个字节表示被浪费的。
发表于 2022-06-28 01:15:19 回复(0)