MST

星途 面试题库

面试题:Rust栈内存分配基础

在Rust中,简单类型(如i32、bool)默认是分配在栈上的。请描述当定义一个包含多个简单类型的结构体,并创建该结构体实例时,栈内存是如何分配的。
41.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 结构体定义示例

    struct MyStruct {
        num: i32,
        flag: bool
    }
    
  2. 栈内存分配过程

    • 当创建MyStruct实例时,例如let my_inst = MyStruct { num: 42, flag: true };,栈上会为这个实例分配一块连续的内存空间。
    • 这块内存空间的大小是结构体中所有成员类型大小之和。在这个例子中,i32通常占用4字节,bool占用1字节,所以MyStruct实例在栈上占用5字节(实际在某些平台上可能会因为对齐规则有所不同)。
    • 栈从高地址向低地址增长(在大多数架构下)。my_inst的内存块会被放置在栈顶(低地址端),其成员numflag依次排列在这块内存中,num在前,flag在后。具体的布局和顺序取决于结构体定义中成员的顺序。

    结构体中的简单类型成员,因为本身就是栈分配的,所以结构体实例整体也在栈上分配,各成员在栈上紧密排列,遵循内存对齐规则(以提高内存访问效率)。内存对齐规则会使实际占用内存可能比成员大小之和略大。例如,如果MyStruct在一个要求4字节对齐的平台上,虽然i32bool加起来是5字节,但实际占用可能是8字节,多出的3字节是为了满足对齐要求。