ZhangHanDong / tao-of-rust-codes

《Rust编程之道》随书源码
https://ruststudy.github.io/tao_of_rust_docs/tao_of_rust/
MIT License
1.18k stars 170 forks source link

第四章内存管理 结构体A的内存对齐前后的布局对比 图4-8绘制似乎是错误的,请确认 #321

Closed xiaohaowudi closed 3 years ago

xiaohaowudi commented 3 years ago

页码与行数


文本或排版错误

书中原文102页23行中描述std::mem::size_of()计算出的结构体A的大小为8字节,但是内存分布图绘制错误,实际上类似的结构体在C++中按照4字节对齐,大小应该是12字节,rust中占用为8字节是因为编译器重新排列了a, b, c三个字段的顺序,让顺序变为了b --- c ----a, 将b起始地址对齐到4字节整除的地址位置,然后c紧接其后,c的地址是2字节整除的,最后的a的起始地址是1字节整除的(此内存布局可以通过LLDB调试器验证),原书中图4-8的对齐之后的内存布局似乎是错误的,所以102页末尾到103页开始关于A结构体占用内存大小为什么是8的论述似乎并不准确,可能误导读者,对内存布局造成错误理解,本人在rust 1.49.0版本上实验,结构体A实际内存布局与书中所讲有出入

ZhangHanDong commented 3 years ago

@xiaohaowudi 看一下随时源码的勘误,目测你说的问题和内存重排有关系。看一下相关issues:https://github.com/ZhangHanDong/tao-of-rust-codes/issues

xiaohaowudi commented 3 years ago

@ZhangHanDong 喔,好的,已经看到重复的issue了,应该是同一个问题