3

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 で同じ型を宣言するにはどうすればよいですか?

「pragma align」は、グローバル変数または静的変数に対してのみ機能し、変数名が必要なため、適切ではありません。

4

4 に答える 4

2

Sun C 5.9 (Sun ONE Studio 12) では、aligned 属性がサポートされています。

typedef uint16_t AlignedType __attribute__ ((aligned (4)));

残念ながら、この属性は C++ ではサポートされていません (少なくとも Sun C++ 5.10 まで)。

于 2012-01-26T16:41:42.767 に答える
1

少なくとも試してみる価値があるかもしれません:

typedef union {
  uint16_t value;
  uint32_t _dummy;
} AlignedType;

もちろん、これによりアクセスが少し面倒になり、直接割り当てが無効になるため、コードベース全体が壊れる可能性があります. unionまた、純粋に、そのサイズのために 32 ビットの「ネイティブ アラインメント」を持つと想定されるより大きな型を含めると、全体としてが 32 ビットでアラインされるという仮定に基づいています。

于 2012-01-24T10:03:03.987 に答える
0

今後の参考として、コンパイラが追いついたとき、C++11 には標準のアラインメント属性があります。 alignas([dcl.align] in N3242 ) を参照してください。

于 2012-01-24T14:53:44.553 に答える