首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SunStudio C++编译器中的对齐

SunStudio C++编译器中的对齐
EN

Stack Overflow用户
提问于 2012-01-24 17:43:29
回答 4查看 460关注 0票数 3

我需要为4个字节对齐的2字节变量声明类型别名。

在GCC,XL C/C++ (AIX),aCC (HP-UX)中,我可以使用以下代码:

代码语言:javascript
复制
typedef uint16_t AlignedType __attribute__ ((aligned (4)));

在Windows中,我可以使用:

代码语言:javascript
复制
typedef __declspec(align(4)) unsigned __int16 AlignedType;

如何在SunStudio C++ 11中声明相同的类型?

“杂注对齐”不适合,因为它只适用于全局或静态变量,并且需要变量名。

EN

回答 4

Stack Overflow用户

发布于 2012-01-27 00:41:43

从Sun C 5.9 (Sun ONE Studio 12)开始,支持对齐属性:

代码语言:javascript
复制
typedef uint16_t AlignedType __attribute__ ((aligned (4)));

不幸的是,C++ (至少在Sun C++ 5.10中)不支持该属性。

票数 2
EN

Stack Overflow用户

发布于 2012-01-24 18:03:04

这至少值得一试:

代码语言:javascript
复制
typedef union {
  uint16_t value;
  uint32_t _dummy;
} AlignedType;

这当然会让访问变得更加痛苦,而且会扼杀直接赋值,因此可能会破坏整个代码库。此外,它纯粹基于这样的假设,即包含一个更大的类型,由于其大小,假设具有32位的“本机对齐”,从而使union作为一个整体对齐在32位上。

票数 1
EN

Stack Overflow用户

发布于 2012-01-24 22:53:45

有关将来的参考,当编译器赶上时,C++11具有标准的对齐属性,请参见alignas (N3242中的dcl.align)。

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

https://stackoverflow.com/questions/8984660

复制
相关文章

相似问题

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