Hi, When enable the gcc 4.1 with EABI support for ARM, I met such situation about the alignment. Here is my test case: #include <stdio.h> #include <stdlib.h> struct test { char c1; long long n; char c2; }; int my_temp(void) { int i; int j; char str[2]; long long l1; long long l2; char str2; printf("%s:\tj address: 0x%08x, str address: 0x%08x\n", __func__, &j, str); printf("%s:\tl1 address: 0x%08x, l2 address: 0x%08x\n", __func__, &l1, &l2); printf("%s:\tstr2 address: 0x%08x\n", __func__, &str2); return 0; } main() { struct test t; my_temp(); printf("%s:\ttest.c1 address: 0x%08x\n", __func__, &(t.c1)); printf("%s:\ttest.n address: 0x%08x\n", __func__, &(t.n)); printf("%s:\ttest.c2 address: 0x%08x\n", __func__, &(t.c2)); } With the gcc 4.1 + EABI for ARM(build optioni: -mabi=aapcs-linux -O2), I get following output: [root@Linux /test]#./test.gnu.eabi my_temp: j address: 0xbea85ac0, str address: 0xbea85abe my_temp: l1 address: 0xbea85ab0, l2 address: 0xbea85aa8 my_temp: str2 address: 0xbea85aa7 main: test.c1 address: 0xbea85ad8 main: test.n address: 0xbea85ae0 main: test.c2 address: 0xbea85ae8 With the gcc 3.4.3 without EABI(build option: -O2), I get following output: [root@Linux /test]#./test.gnu my_temp: j address: 0xbeb69bf8, str address: 0xbeb69bf0 my_temp: l1 address: 0xbeb69be8, l2 address: 0xbeb69be0 my_temp: str2 address: 0xbeb69bdf main: test.c1 address: 0xbeb69c10 main: test.n address: 0xbeb69c18 main: test.c2 address: 0xbeb69c20 Please notice the address of the str and j. there IS NO memory hole between therm when using gcc 3.4.3 and there IS memory hole when using gcc 4.1. Does anyone know the reason about this problem? Thanks a lot. Regards Yin, Fengwei