是否需要在LINUX上进行UNALIGNED内存访问(从Windows移植到Linux)

时间:2012-05-28 21:07:21

标签: windows linux

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

你能告诉我吗? 1)移植到Linux时需要UNALIGNED内存访问 2)如果需要,请告诉我如何实现同样的目标。

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

据我所知,MSVC中的UNALIGNED关键字在x86上是一个noop。在其他体系结构上,它将发出更复杂的指令序列,以确保访问成功完成。你想找到一个gcc等价物吗?我不相信一个存在。

答案 1 :(得分:1)

最近gcc您可以考虑使用__attribute__ ((__packed__))

但我建议尽可能避免使用它。编译器在对齐字段方面做得非常好。 ABI可能会定义对齐规则。

您应该了解源代码使用UNALIGNED的原因;是因为数据具有外部定义的格式,还是出于“性能”原因?将优化留给编译器!