ISaGRAF Ver.4の場合 |
-
ターゲット側のメモリ配置の仕様は、以下のような簡単なプログラムで確認できます。
2つの構造体を作り、そのサイズを調べます。
typedef unsigned char uchar; typedef unsigned long uint32; typedef struct typStruct2Types{ uchar u1; uint32 u2; } structA; typedef struct typStruct3Char{ uchar u1; uchar u2; uchar u3; } structB; main(){ int n1=0; int n2=0; n1=sizeof(structA); n2=sizeof(structB); } |
実行結果のn1,n2の値でアライメントがわかります。以下の通りになります。
n1 = 5 の場合
アラインメントなし (アライメントサイズ=1バイト)
structA | メモリ境界 |
u1 | 1バイト |
u2 | 1バイト |
1バイト | |
1バイト | |
1バイト |
アライメントサイズ=2
structA | メモリ境界 |
u1 | 2バイト |
u2 |
2バイト |
2バイト | |
アライメントサイズ=4
structA | メモリ境界 |
u1 | 4バイト |
� | |
u2 | 4バイト |
-
n2 = 3 の場合
密着アラインメント
structB | |
structB | u1 |
u2 | |
u3 | |
structB | u1 |
u2 | |
u3 |
-
n2 = 4 の場合
密着しないアラインメント
structB | |
structB | u1 |
u2 | |
u3 | |
structB | u1 |
u2 | |
u3 | |