V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
RedBlackTree
V2EX  ›  程序员

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

  •  
  •   RedBlackTree · 2021-03-23 14:49:31 +08:00 · 1882 次点击
    这是一个创建于 1375 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    有的架构不对齐是根本跑不起来的。所以从可移植性的角度来说也需要对齐。
    3dwelcome
        8
    3dwelcome  
       2021-03-23 15:13:06 +08:00
    需要关注,以前不懂,我写了一大堆不对齐的 PC x86 源代码,后来移植到安卓 ARM 上,才发现 GCC/CLANG 都需要强制内存对齐的!要不然直接代码奔溃。
    修了一大堆潜在 BUG,重写了一大片代码,这教训绝对深刻。
    hxndg
        9
    hxndg  
       2021-03-23 15:13:41 +08:00
    从实际角度出发,一般的数据结构编译器也会做优化
    如果是类似锁这种高频结构的话是必须得考虑对齐和伪共享问题的。
    不过,一般平时不会经常用到。
    hitmanx
        10
    hitmanx  
       2021-03-23 15:15:31 +08:00
    上层一般不用关心,底下写框架的或者写引擎的,一般会更重视这个。以前入门 cuda 时候印象挺深,一半的篇幅 API 就讲完了,剩下的一半篇幅好几百页都会侧重于性能分析以及性能提高,比如 cache 的 bank conflict, hit rate 等等,这些都需要一些专门的工具去分析的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2105 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:20 · PVG 08:20 · LAX 16:20 · JFK 19:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.