最近对于编程语言为什么要进行内存对齐有些疑问,网上看的资料基本都是说为了 CPU 的效率,减少 CPU 访问内存的次数,但是总感觉这种说法很勉强,举例: 对于 64 位系统,CPU 按 8 字节取内存,那么假设有
struct s { a int16 b int64 }
对于这个结构体,我的理解是不管对不对齐 CPU 总是要取两次的,如果这个时候多了个 c 变量
struct s { a int16 b int64 c int16 }
如果不对齐的话,那么只需要 2+8+2=12 个字节空间,CPU 只需要取两次。如果是内存对齐,那么 需要 8+8+8=24 个字节空间,CPU 反而需要读三次,这么来看不对齐不但节省 CPU 时间,还节省内存空间,所以为什么要对齐呢?。。。难道 CPU 拼接变量很消耗时间?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.