首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-06 
【猪年第一问】关于全局数组的地址分配问题示例代码:structexmStr{char*pa1char*pa2}chararr[]12345678

【猪年第一问】关于全局数组的地址分配问题
示例代码:
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有不同编译器的相同代码运行的实例和解析。
[解决办法]
没规定。不要试图依赖某个结果。
[解决办法]
不同编译器不同字长的机器都是分布一样
只要了解分布原理就可以了

热点排行