读书人

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

发布时间: 2012-02-06 15:52:45 作者: rapoo

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

读书人网 >C++

热点推荐