堆栈应该增长到一个低地址,为什么我的代码测试的结果要增长到一个高地址

问题描述

#include <stdio.h>

int main() {
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    printf("%p\n",&a);
    printf("%p\n",&b);
    printf("%p\n",&c);
    printf("%p\n",&d);

    return 0;
}

结果是: 0x7fff822a2678 0x7fff822a267c 0x7fff822a2680 0x7fff822a2684

解决方法

这是否回答了您的问题Does stack grow upward or downward?

堆栈的行为(向上或向下)取决于应用程序二进制接口(ABI)以及调用堆栈(即激活记录)的组织方式。 程序在其整个生命周期中都必须与其他程序(例如OS)进行通信。 ABI确定一个程序如何与另一个程序进行通信。 不同体系结构的堆栈可以以任何一种方式增长,但是对于体系结构而言,它将是一致的。请检查此wiki链接。但是,堆栈的增长是由该架构的ABI决定的。

,

编译器可以自由地在本地堆栈帧的任何位置分配本地(自动)变量,您不能仅凭此可靠地推断堆栈的增长方向。您可以通过比较嵌套堆栈框架的地址来推断堆栈增长的方向,即将函数堆栈框架内的局部变量的地址与其被调用方的地址进行比较