我正在将代码从Windows移植到Linux(Red Hat Linux或Fed)。在现有代码中,我发现代码具有(数据类型UNALIGNED *)引用。
你能告诉我吗? 1)移植到Linux时需要UNALIGNED内存访问 2)如果需要,请告诉我如何实现同样的目标。我到处寻找一个linux版本。我遇到过arm / unaligned.h的使用。当我尝试添加相同的内容时,它会给出一个错误“没有这样的文件或目录”。
感谢。
答案 0 :(得分:1)
对齐是CPU限制,而不是操作系统。 x86 CPU可以进行未对齐的访问(有一些性能损失),如果你试图从对齐指针以外的其他东西加载一个单词,许多其他人会在相同的Linux(或其他)版本下产生总线错误。
据我所知,MSVC中的UNALIGNED关键字在x86上是一个noop。在其他体系结构上,它将发出更复杂的指令序列,以确保访问成功完成。你想找到一个gcc等价物吗?我不相信一个存在。
答案 1 :(得分:1)
最近gcc
您可以考虑使用__attribute__ ((__packed__))
但我建议尽可能避免使用它。编译器在对齐字段方面做得非常好。 ABI可能会定义对齐规则。
您应该了解源代码使用UNALIGNED
的原因;是因为数据具有外部定义的格式,还是出于“性能”原因?将优化留给编译器!