局部变量在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。!
------解决方案--------------------
看看汇编是怎么样的
------解决方案--------------------
引用:
用release模式编译输出就是你希望的了

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吧