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