MST

星途 面试题库

面试题:Rust堆内存内存对齐:结构体的对齐计算

在Rust中,假设有如下结构体: ```rust struct MyStruct { a: u8, b: u32, c: u16, } ``` 请说明这个结构体在堆内存中的内存对齐方式,并计算出该结构体实例占用的内存大小。
27.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 内存对齐方式

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

    • a占用1字节。
    • 填充3字节使得b 4字节对齐。
    • b占用4字节。
    • c占用2字节。
    • 结构体整体占用内存大小为:1 + 3 + 4 + 2 = 10字节。

    由于结构体整体是4字节对齐,10字节不是4的倍数,所以会在结构体末尾填充2字节,使其占用内存大小为12字节。

所以,MyStruct结构体实例在堆内存中按4字节对齐,占用内存大小为12字节。