【猪年第一问】关于全局数组的地址分配有关问题

【猪年第一问】关于全局数组的地址分配问题
示例代码:
struct   exmStr
{
char   *pa1;
char   *pa2;
};

char   arr[]   =   "123456789 ";

exmStr   e1[]   =   {   {arr,   arr+1},   {arr+1,   arr},   {arr,   arr+2},   {arr,   arr+3},   {NULL,   NULL}};
exmStr   e2[]   =   {   {arr+1,   arr},   {arr+1,   arr},   {arr+2,   arr},   {arr+3,   arr},   {NULL,   NULL}};

int   main(int   argc,   char*   argv[])
{
printf(   "%p,%p\n ",   e1,   e2   );

return   0;
}

//请问数组e1,e2的首地址之差是多少?试了不同编译器,结果不同,想知道为什么?


------解决方案--------------------
c++标准并没有规定相临创建的变量的地址应该相临,所有不同的编译器有不同的实现吧!个人观点
------解决方案--------------------
1 结构体的对齐单位是否一致
2 全局数组变量间的填充字节是否一致 ~
------解决方案--------------------
1,
16位的机器,和32位的机器,和64位机器。其对齐单位不一样。
2,
搂主可以了解一下字节对齐是怎么回事。
3,
同一机器,不同编译器所实现的存放变量的方式,以及对齐方式,也各有差别。
------解决方案--------------------
上网搜一搜“内存中的数据对齐”。

《程序员面试宝典》,p44有不同编译器的相同代码运行的实例和解析。
------解决方案--------------------
没规定。不要试图依赖某个结果。
------解决方案--------------------
不同编译器不同字长的机器都是分布一样
只要了解分布原理就可以了