首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tr1数组应该是16字节对齐的吗?

tr1数组应该是16字节对齐的吗?
EN

Stack Overflow用户
提问于 2012-01-04 08:14:10
回答 1查看 143关注 0票数 0

在tr1数组中的"gcc 4.2.1版(基于苹果公司Build5658) (LLVM build 2335.15.00)“中,我看到了:

代码语言:javascript
复制
  value_type _M_instance[_Nm ? _Nm : 1] __attribute__((__aligned__)); 

而在"gcc 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)版“中,我看到的是:

代码语言:javascript
复制
  value_type _M_instance[_Nm ? _Nm : 1];

也就是说,似乎tr1数组不再被指定为对齐的(这会影响为它们编写的SSE代码)。我们的一些单元测试在_mm_load_ps中失败了。有没有关于这一变化的讨论?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-05 00:02:53

规范没有指定tr1::array是16字节对齐的。唯一的保证是数组将根据value_type的大小正确对齐。除非存储在数组中的对象的大小是16字节的倍数,否则不会得到使用value_type指令所需的128位对齐。如果您的现有代码依赖于这样一个事实,即一个编译器对所有array实例使用16字节对齐,那么您应该修复它。您正在利用超出标准定义的行为,这是非常脆弱的。

如果您的代码依赖于它所使用的内存上的特定数量的对齐,那么您应该在分配内存时显式地强制执行这种对齐;否则,如果您更改编译器或平台,则很容易出现错误。A previous question解决了如何让tr1::array对象使用对齐内存的问题。

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

https://stackoverflow.com/questions/8720516

复制
相关文章

相似问题

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