c – 为什么对齐边界大于4?

c – 为什么对齐边界大于4?,第1张

概述我不明白的是,为什么我们必须在大于4字节的边界对齐内存中的数据,因为所有其他边界都是4的倍数.假设CPU在一个周期内可以读取4个字节,那么它基本上没有区别.性能,如果该数据大8字节,并在4字节/ 8字节/ 16字节等对齐等. 第一:x86 CPU不读取4个字节的内容,它们可以在一个周期内读取8个字节,甚至可以读取 SIMD个扩展名. 但回答你的问题“为什么对齐边界多于4?”,假设一个通用架构(你 我不明白的是,为什么我们必须在大于4字节的边界上对齐内存中的数据,因为所有其他边界都是4的倍数.假设cpu在一个周期内可以读取4个字节,那么它基本上没有区别.性能,如果该数据大8字节,并在4字节/ 8字节/ 16字节等对齐等.解决方法 第一:x86 cpu不读取4个字节的内容,它们可以在一个周期内读取8个字节,甚至可以读取 SIMD个扩展名.

但回答你的问题“为什么对齐边界多于4?”,假设一个通用架构(你没有指定一个和you wrote that x86 was just an example),我将提出一个特定的案例:GPU.

如果地址在多个访问大小(PTX ISA ld/st)上对齐,则只能访问(存储/加载)NVIDIA GPU内存.当地址与访问大小的倍数对齐时,会出现不同类型的加载和最高性能的加载,因此如果您尝试从内存加载双精度(8字节),您将拥有(伪代码):

ld.double [48dec] // Works,8 bytes alignedld.double [17dec] // Fails,not 8 bytes aligned

在上述情况下,当试图访问(r / w)未正确对齐的内存时,该过程实际上会导致错误.如果你想要速度,你必须提供一些安全保障.

这可能会回答你关于为什么首先存在大于4的对齐边界的问题.在这种架构上,访问大小1始终是安全的(每个地址都对齐1).对于每个n> 1,情况并非如此.

总结

以上是内存溢出为你收集整理的c – 为什么对齐边界大于4?全部内容,希望文章能够帮你解决c – 为什么对齐边界大于4?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存