在有效负载之后存储标签

主要观点:在堆或栈上分配值时,分配器需确保指针有正确对齐,结构体布局复杂且可能浪费空间,Swift 有稍好的布局算法,和大多数语言不同,sum 类型如Option<T>通常布局方式会浪费空间,若将Option的标签放在末尾则可像Quux<T>一样节省空间,已知只有 Swift 这样布局且未找到相关讨论或文档,在 Rust 中Option<Option<u64>>大小为 16 是因编译器优化,若要匹配上述大小计算需显式要求稳定布局。
关键信息:指针对齐概念及影响、结构体布局方式及大小计算、sum 类型的常见布局及优化、Swift 和 Rust 中关于Option的不同处理。
重要细节:不同结构体字段的对齐要求及计算方式,如struct Foostruct Bar;Swift 中Quux<T>的布局及大小变化;Rust 中Option<Option<u64>>大小为 16 的原因及如何显式要求稳定布局等。

阅读 11
0 条评论