为什么在顺序函数调用中“ env”的地址不同?

时间:2018-10-23 14:36:02

标签: c operating-system

void env_create(uint8_t *binary, enum EnvType type){
    struct Env *env = NULL;
    int r = env_alloc(&env, 0); // &env = 0xf0117fcc
    cprintf("env addr: %x\n", &env); // &env = 0xf0117fbc

    if(r != 0) panic("env_create:%e", r);

    load_icode(env, binary); // &env = 0xf0117fcc
    env->env_type = type;
}

当我使用gdb检查“ env”的地址时,它始终为0xf0117fcc,但是调用“ env_alloc”后的“ env”的正确值存储在0xf0117fbc中。我想知道是什么原因引起的?预先感谢。

1 个答案:

答案 0 :(得分:2)

env是一个自动变量。在大多数(如果不是全部)C ++实现中,这是在堆栈上实现的。您只是获得了一个不同的堆栈位置。