关于内存对齐,在实际开发中需要关注吗?

2021-03-23 14:49:31 +08:00
 RedBlackTree

之前面试百度,面试官花了很长时间在内存对齐上面,答得不好。对高频使用的数据结构,好的对齐方式,肯定有好处,但通常情况下这种内存层面的速度差异对性能的影响真的有必要考虑吗?

1676 次点击
所在节点    程序员
10 条回复
xuanbg
2021-03-23 14:51:29 +08:00
有必要!非常有必要。浪费点内存不算啥,减少错误提高性能很重要。
delpo
2021-03-23 14:53:34 +08:00
基本的了解还是有必要的,如果只是换一下变量定义顺序就能减少内存占用,何乐而不为呢
lewis89
2021-03-23 14:54:53 +08:00
Java 根本不需要操心这种问题..
你应该是写 C/C++的,一般这种实际开发中也不需要考虑,大部分都是内存管理做掉了
像 C++可能重写了 内存管理,C 的话可能不用自带的 malloc 跟 free
LGA1150
2021-03-23 14:57:01 +08:00
MIPS 下内存不对齐的访问会直接 CPU 异常
Akiyu
2021-03-23 14:59:46 +08:00
使用标准库以及使用接口分配的内存, 底层的对补齐都有处理.
比较需要关心的是用户自定义数据结构. 数据按照从小到大排列就可以最小化.
gmywq0392
2021-03-23 15:05:51 +08:00
如果涉及到和 native 的接口交互可能需要,和使用语言应该没多大关系。。。
dndx
2021-03-23 15:10:07 +08:00
重要,尤其是实现数据结构,对齐访问可以比不对齐快很多,而且 CPU 缓存命中率也会好很多。即使是在像 x86 这种可以允许不对齐访问的架构上。

有的架构不对齐是根本跑不起来的。所以从可移植性的角度来说也需要对齐。
3dwelcome
2021-03-23 15:13:06 +08:00
需要关注,以前不懂,我写了一大堆不对齐的 PC x86 源代码,后来移植到安卓 ARM 上,才发现 GCC/CLANG 都需要强制内存对齐的!要不然直接代码奔溃。
修了一大堆潜在 BUG,重写了一大片代码,这教训绝对深刻。
hxndg
2021-03-23 15:13:41 +08:00
从实际角度出发,一般的数据结构编译器也会做优化
如果是类似锁这种高频结构的话是必须得考虑对齐和伪共享问题的。
不过,一般平时不会经常用到。
hitmanx
2021-03-23 15:15:31 +08:00
上层一般不用关心,底下写框架的或者写引擎的,一般会更重视这个。以前入门 cuda 时候印象挺深,一半的篇幅 API 就讲完了,剩下的一半篇幅好几百页都会侧重于性能分析以及性能提高,比如 cache 的 bank conflict, hit rate 等等,这些都需要一些专门的工具去分析的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764268

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX