C の構造体の整列されていないメンバーにアクセスしても問題ないかどうかをテストしたいので、コードを参照してください
#include <stdio.h>
#pragma pack(1) /* force 1 byte alignment */
/* either member b or member d is mis-aligned */
typedef struct
{
int b;
unsigned char c;
unsigned int d;
}A ;
int main(int argc, char *argv[])
{
A _a = {0};
unsigned int *p = NULL;
unsigned int *q = NULL;
printf("addr of _a : 0x%08x, size of _a : %u\n", &_a, sizeof(_a));
p = (unsigned int*)(&_a.b);
q = (unsigned int*)(&_a.d);
/* should this fail ? */
(*p)++ , (*q)++;
return 0;
}
メモリ アクセスのミスアラインによる例外が原因でプログラムがクラッシュすると仮定しますが、Linux 3.6.11(GCC 4.7.2)、WinXP(MingW)、codepad オンライン コンパイラでテストした結果、非常にうまく機能することが判明しました。 ( http://codepad.org/yOoc8ACG )
結果を説明してください.OSがプログラムを保存するために何かをしたと思います.VxWorksや他のオペレーティングシステムで動作するかどうかはまだ疑問です.
注: コードは Intel ベースのマシンで実行されます!
前もって感謝します !