x******g 发帖数: 41 | 1 void testAddressOf()
{
int a = 4;
int *b = &a;
int c = 5;
cout << "address of a: " << &a << endl;
cout << "address of &b " << &b << endl;
cout << "address of c: " << &c << endl;
}
三个地址分别是
0015F75C
0015F750
0015F744
整形不是4个字节么,为什么地址之间差距是0xC=12呢? |
f******y 发帖数: 2971 | 2 没有要求说整型一定是4个,也没有要求说变量地址一定要相连。
【在 x******g 的大作中提到】 : void testAddressOf() : { : int a = 4; : int *b = &a; : int c = 5; : cout << "address of a: " << &a << endl; : cout << "address of &b " << &b << endl; : cout << "address of c: " << &c << endl; : } : 三个地址分别是
|
x******g 发帖数: 41 | 3 再问问我的机器是32位的,整型应该是4bytes吧?
为什么连续分配的变量没顺着分配呢?
有什么特别的原因系统要这么做吗?谢谢。
【在 f******y 的大作中提到】 : 没有要求说整型一定是4个,也没有要求说变量地址一定要相连。
|
o********n 发帖数: 193 | 4 你那是debug编译的,编译器为每个Int在stack上分配了12个byte,另外8个空在那边不
知道干什么用。
你用release编译应该就是4字节的,变量要够多,如果变量不多的话编译器直接用寄存
器。 |
o********n 发帖数: 193 | 5 32位CPU整型一定是4个,连续定义的局部变量地址一定相连。
【在 f******y 的大作中提到】 : 没有要求说整型一定是4个,也没有要求说变量地址一定要相连。
|
f******y 发帖数: 2971 | 6 按照你这个理论,你来解释一下你自己观察到的事实吧。
【在 x******g 的大作中提到】 : 再问问我的机器是32位的,整型应该是4bytes吧? : 为什么连续分配的变量没顺着分配呢? : 有什么特别的原因系统要这么做吗?谢谢。
|
x******g 发帖数: 41 | 7 试过了,release是4个字节,多谢
【在 o********n 的大作中提到】 : 你那是debug编译的,编译器为每个Int在stack上分配了12个byte,另外8个空在那边不 : 知道干什么用。 : 你用release编译应该就是4字节的,变量要够多,如果变量不多的话编译器直接用寄存 : 器。
|
x******g 发帖数: 41 | 8 不知道所以才来问为啥编译器要这么做呀
【在 f******y 的大作中提到】 : 按照你这个理论,你来解释一下你自己观察到的事实吧。
|