面试题答案
一键面试-
结构体定义示例:
struct MyStruct { num: i32, flag: bool }
-
栈内存分配过程:
- 当创建
MyStruct
实例时,例如let my_inst = MyStruct { num: 42, flag: true };
,栈上会为这个实例分配一块连续的内存空间。 - 这块内存空间的大小是结构体中所有成员类型大小之和。在这个例子中,
i32
通常占用4字节,bool
占用1字节,所以MyStruct
实例在栈上占用5字节(实际在某些平台上可能会因为对齐规则有所不同)。 - 栈从高地址向低地址增长(在大多数架构下)。
my_inst
的内存块会被放置在栈顶(低地址端),其成员num
和flag
依次排列在这块内存中,num
在前,flag
在后。具体的布局和顺序取决于结构体定义中成员的顺序。
结构体中的简单类型成员,因为本身就是栈分配的,所以结构体实例整体也在栈上分配,各成员在栈上紧密排列,遵循内存对齐规则(以提高内存访问效率)。内存对齐规则会使实际占用内存可能比成员大小之和略大。例如,如果
MyStruct
在一个要求4字节对齐的平台上,虽然i32
和bool
加起来是5字节,但实际占用可能是8字节,多出的3字节是为了满足对齐要求。 - 当创建