| 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 | |