C语言中,栈向下增长,为什么先声明的变量内存地址还更小?

比如

 int a = 1;
 int b = 2;

我在gdb中查看

 p &a  0xbffff018
 p &b  0xbffff01c

如果向下增长,不应该b的地址更小吗?为什么这里b的地址反而更大了...

应该是 需要条用其他函数,看传递的参数和里面的变量的内存地址 这样才能判断
这几个是编译器自己优化了。

 #include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    printf("%d %d", (int)&a, (int)&b);
}

-7718052 -7718056

http://codepad.org/YYoBzwYh
我这里运行是向下增长的。

不知道你的变量是在哪里定义的

这要看你定义的变量了

        在计算机的术语里,有个说法叫栈帧,指的就是这些与一次函数调用相关的东西,而在一个栈帧内的这些东西其相对顺序是由编译器决定的,所以,仅仅在一个栈帧内做比较,都会有对编译器的依赖。就这个问题而言,参数和局部变量,甚至包括返回地址,都是相同的,因为它们在同一个栈帧内,它们之间的比较是不能解决这个问题的,而它们就是一个函数的所有相关信息,所以,一个函数很难解决这个问题。
        解决方法:
        设计两个函数,一个作为调用方,另一个作为被调用方。被调用方以一个地址(也就是指针)作为自己的入口参数,调用方传入的地址是自己的一个局部变量的地址,然后,被调用方比较这个地址和自己的一个局部变量地址,由此确定栈的增长方向。