LINUX上是否需要未对齐的内存访问(从Windows移植到LINUX)

LINUX上是否需要未对齐的内存访问(从Windows移植到LINUX),windows,linux,Windows,Linux,我正在将代码从Windows移植到Linux(Red Hat Linux或Fed)。在现有代码中,我确实发现代码具有(datatype UNALIGNED*)引用 你能告诉我吗 1) 移植到Linux时是否需要未对齐的内存访问 2) 如果需要,请告诉我如何才能达到同样的效果 我四处寻找linux版本。我遇到过使用arm/unaligned.h。当我尝试添加相同的文件时,它会给我一个错误“没有这样的文件或目录” 谢谢。对齐是CPU限制,而不是操作系统限制。x86 CPU可以执行未对齐的访问(有一些

我正在将代码从Windows移植到Linux(Red Hat Linux或Fed)。在现有代码中,我确实发现代码具有(datatype UNALIGNED*)引用

你能告诉我吗 1) 移植到Linux时是否需要未对齐的内存访问 2) 如果需要,请告诉我如何才能达到同样的效果

我四处寻找linux版本。我遇到过使用arm/unaligned.h。当我尝试添加相同的文件时,它会给我一个错误“没有这样的文件或目录”


谢谢。

对齐是CPU限制,而不是操作系统限制。x86 CPU可以执行未对齐的访问(有一些性能损失),如果您尝试从对齐指针以外的其他对象加载单词,则在相同的Linux(或任何其他)版本下,许多其他CPU都会产生总线错误


据我所知,MSVC中未对齐的关键字在x86上是一个noop。在其他架构上,它将发出更复杂的指令序列,以确保访问成功完成。您是否正在尝试寻找gcc等效项?我不相信有一个存在。

最近的<代码> GCC < /代码>你可以考虑使用< /P> 但我建议尽可能避免使用它。编译器在对齐字段方面做得相当好。ABI可能会定义对齐规则


您应该理解为什么源代码使用未对齐的
;是因为数据具有外部定义的格式,还是出于“性能”原因?把优化留给编译器吧

我敢肯定,由于Linux x86上的未对齐访问,我已经提出了一个SIGBUS。这可能是因为,尽管CPU可以处理它,但在linux中默认情况下它没有打开(或关闭,取决于您的pov)?@Andrewtomaz Fathomling:有些SSE指令需要对齐的地址,也许您使用了这些地址。这是不同的事情。UNALIGNED是指针上的一个属性,它表示指针可用于加载或存储(在运行时)未自然对齐的地址。“压缩”是结构的一个属性,它改变了结构字段在内存中的排列方式。它们是相关概念(即打包将生成未对齐的结构字段),但不能使用一个来模拟另一个。