0

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

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

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

谢谢。

4

2 回答 2

1

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

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

于 2012-05-29T03:42:22.347 回答
1

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

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

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

于 2012-05-29T04:50:55.607 回答