首页 > 试题广场 >

32位平台上struct { unsigned char a

[单选题]
在32位平台上
struct {
    unsigned char a;
    int b;
    short c
} s;
请问s的起始地址下面说法正确的是()
  • 单字节对齐
  • 双子节对齐
  • 四字节对齐
  • 说法都不对
我们说,所有的成员在分配内存时都要与所有成员中占内存最多的数据类型所占内存空间的字节数对齐。假如这个字节数为 N,那么对齐的原则是:理论上所有成员在分配内存时都是紧接在前一个变量后面依次填充的,但是如果是“以 N 对齐”为原则,那么,如果一行中剩下的空间不足以填充某成员变量,即剩下的空间小于某成员变量的数据类型所占的字节数,则该成员变量在分配内存时另起一行分配。
下面再来举一个例子,大家觉得下面这个结构体变量data占多少字节?
struct STUDENT
{
    char a;
    char b;
    char c;
    char d;
    char e;
    int f;
}data;
首先最长的数据类型占 4 字节,所以是以 4 对齐。然后 a 占 1 字节,b 接在 a 后面占 1 字节,c 接在 b 后面占 1 字节,d 接在 c 后面占 1 字节,此时满 4 字节了,e 再来就要另起一行。f 想紧接着 e 后面分配,但 e 后面还剩 3 字节,小于 int 类型的 4 字节,所以 f 另起一行。即该结构体变量分配内存时如下:



发表于 2019-07-24 17:52:05 回复(7)
结构体内int 占用内存最大,为4字节,故采用四字节对齐,详情可参考以下链接
编辑于 2019-12-22 20:45:03 回复(0)
与占用内存最大的变量类型对齐。
发表于 2020-02-27 07:18:15 回复(0)
1  -> 4
4
2 -> 4

== 12

按4字节对齐。
发表于 2023-06-09 13:09:56 回复(0)
有点不太能理解题目中的起始地址对齐
发表于 2022-12-01 11:14:44 回复(1)
结构体对齐原则之一:按照结构体中占用内存空间最大的类型对齐,例如本题中,int型占用4字节且为最大,所以按照4字节对齐。
发表于 2022-01-12 14:33:40 回复(0)
本题考查对齐方式。32位操作系统int是4个字节,根据结构体对齐方法,按照结构体类型中空间最大的对齐,故按4字节对齐
发表于 2021-12-03 15:02:00 回复(0)
这个结构体中占用内存最大的是int型,为4字节,因此应该以四字节对齐
发表于 2020-12-23 15:28:12 回复(0)