首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VS2005如何强制所有指针访问都不对齐?

VS2005如何强制所有指针访问都不对齐?
EN

Stack Overflow用户
提问于 2012-07-03 22:32:04
回答 2查看 599关注 0票数 2

我有一些代码,或者更确切地说,是从STM32/FreeRTOS复制到OMAP2430/WindowsCE平台的完整项目。

在复制的C/C++文件中,我有一些处理数据结构的代码,这些数据结构是在运行时创建和销毁的,大小和地址对齐完全取决于在创建每个数据结构时进入数据结构的数据量。

我不想使用任何打包/填充来使地址对齐正确,但希望使用任何允许对数据结构进行非对齐访问的编译器选项。目前,我一直使用__unaligned类型修饰符来表示数据结构指针(来自Windef.hUNALIGNED宏)

我知道它会造成一些性能下降,但我可以在这段代码中接受它。

我想从我的程序员同事那里知道的是,在Windows CE编译器设置中有一个选项,它将强制所有内存访问不对齐。我说的是像这样的https://blogs.oracle.com/d/entry/on_misaligned_memory_accesses

任何答案都是非常感谢的。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-07-04 01:47:58

我认为,在ARM上,未对齐的访问可能是硬件错误,而不是x86上的性能下降。因此,编译器可能不可能执行这样的操作。

票数 1
EN

Stack Overflow用户

发布于 2012-07-04 01:54:46

你有几个选择。

将特定元素设置为__unaligned就可以了。也是如此:

代码语言:javascript
复制
# pragma pack (1)
struct x_
{
   char a;    // 1 byte
   int b;     // 4 bytes
   short c;   // 2 bytes
} MyStruct;
# pragma pack ()

或者使用/Zp1在编译器命令行上设置打包

你很快就会知道你的目标处理器是否支持通过非对齐访问来取消对指针的引用-如果不支持,你会在非对齐访问上得到一个总线错误(SIGBUS)。

如果您在跟随指针之前将指针复制出数据结构,那么您可能会两全其美。例如,只需将其临时赋值给函数指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11313174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档