局部变量在stack中的内存储器分配
局部变量在stack中的内存分配
为了验证局部变量在stack中的分配,在vs2005中写了个小程序,却发现输出有些意外。虽然地址是递减的,但是每个的差值却是12????sizeof(int)值为4,那么上述差值也应该是4啊。 若把数据类型int改成char,仍然是12.
//win7(32Bit)+vs2005
int main( )
{
int i,j,k,l;
i=j=k=l=1;
cout<<&i<<" "<<&j<<" "<<&k<<" "<<&l;
return 1;
}
************************************
output:
0012ff28 0012ff1c 0012ff10 0012ff04
我是在c++ programming today这本书上看到的局部变量在stack中的分配,书上讲的差值是4。!
------解决方案--------------------
看看汇编是怎么样的
------解决方案--------------------
gcc 4.1.2 -Wall -g 下的结果
------解决方案--------------------
微软恶心的地方就是做了什么不告诉你
像这个单个变量没有连续存放肯定是它搞了什么东西(比如说优化啊、便于什么操作啊之类)
对存放地址做了一定的算法处理
而用数组的话,它还是会给你一块连续的内存的,一般指针+数字的操作也就用在连续内存上了
没必要对单个独立的变量i去指针+数字跳到j吧
为了验证局部变量在stack中的分配,在vs2005中写了个小程序,却发现输出有些意外。虽然地址是递减的,但是每个的差值却是12????sizeof(int)值为4,那么上述差值也应该是4啊。 若把数据类型int改成char,仍然是12.
//win7(32Bit)+vs2005
int main( )
{
int i,j,k,l;
i=j=k=l=1;
cout<<&i<<" "<<&j<<" "<<&k<<" "<<&l;
return 1;
}
************************************
output:
0012ff28 0012ff1c 0012ff10 0012ff04
我是在c++ programming today这本书上看到的局部变量在stack中的分配,书上讲的差值是4。!
------解决方案--------------------
看看汇编是怎么样的
------解决方案--------------------
gcc 4.1.2 -Wall -g 下的结果
(gdb) list main
1 #include <iostream>
2
3 int main()
4 {
5 int i,j,k,l;
6 i=j=k=l=1;
7 std::cout<<&i<<" "<<&j<<" "<<&k<<" "<<&l;
8 return 1;
9 }
10
(gdb) p &i
$4 = (int *) 0xbf8b5b90
(gdb) p &j
$5 = (int *) 0xbf8b5b8c
(gdb) p &k
$6 = (int *) 0xbf8b5b88
(gdb) p&l
$7 = (int *) 0xbf8b5b84
(gdb)
------解决方案--------------------
微软恶心的地方就是做了什么不告诉你
像这个单个变量没有连续存放肯定是它搞了什么东西(比如说优化啊、便于什么操作啊之类)
对存放地址做了一定的算法处理
而用数组的话,它还是会给你一块连续的内存的,一般指针+数字的操作也就用在连续内存上了
没必要对单个独立的变量i去指针+数字跳到j吧