面试题答案
一键面试-
内存对齐方式:
- 在Rust中,默认的内存对齐规则遵循目标平台的标准。对于结构体,每个字段按其自身的对齐要求进行对齐。
u8
类型的对齐要求是1字节对齐,u32
类型通常是4字节对齐(在常见的32位和64位平台上),u16
类型通常是2字节对齐。- 结构体整体的对齐要求是其所有字段中最大对齐要求的倍数。这里
u32
的对齐要求最大,为4字节对齐,所以MyStruct
结构体整体是4字节对齐。 - 字段
a
(u8
)自身1字节对齐,直接占用1字节。 - 字段
b
(u32
)需要4字节对齐,由于a
占用1字节,所以在a
后面会填充3字节,使得b
的起始地址是4字节对齐。 - 字段
c
(u16
)需要2字节对齐,b
已经是4字节对齐,b
占用4字节后,c
直接从b
后面开始,不需要填充。
-
计算结构体实例占用内存大小:
a
占用1字节。- 填充3字节使得
b
4字节对齐。 b
占用4字节。c
占用2字节。- 结构体整体占用内存大小为:
1 + 3 + 4 + 2 = 10
字节。
由于结构体整体是4字节对齐,10字节不是4的倍数,所以会在结构体末尾填充2字节,使其占用内存大小为12字节。
所以,MyStruct
结构体实例在堆内存中按4字节对齐,占用内存大小为12字节。