我需要为4个字节对齐的2字节变量声明类型别名。
在GCC,XL C/C++ (AIX),aCC (HP-UX)中,我可以使用以下代码:
typedef uint16_t AlignedType __attribute__ ((aligned (4)));在Windows中,我可以使用:
typedef __declspec(align(4)) unsigned __int16 AlignedType;如何在SunStudio C++ 11中声明相同的类型?
“杂注对齐”不适合,因为它只适用于全局或静态变量,并且需要变量名。
发布于 2012-01-27 00:41:43
从Sun C 5.9 (Sun ONE Studio 12)开始,支持对齐属性:
typedef uint16_t AlignedType __attribute__ ((aligned (4)));不幸的是,C++ (至少在Sun C++ 5.10中)不支持该属性。
发布于 2012-01-24 18:03:04
这至少值得一试:
typedef union {
uint16_t value;
uint32_t _dummy;
} AlignedType;这当然会让访问变得更加痛苦,而且会扼杀直接赋值,因此可能会破坏整个代码库。此外,它纯粹基于这样的假设,即包含一个更大的类型,由于其大小,假设具有32位的“本机对齐”,从而使union作为一个整体对齐在32位上。
发布于 2012-01-24 22:53:45
有关将来的参考,当编译器赶上时,C++11具有标准的对齐属性,请参见alignas (N3242中的dcl.align)。
https://stackoverflow.com/questions/8984660
复制相似问题