c - 为什么 "env"的地址在顺序函数调用中不同?

标签 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。我想知道可能导致问题的原因是什么?提前致谢。

最佳答案

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

关于c - 为什么 "env"的地址在顺序函数调用中不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52951712/

相关文章:

C 错误取消引用指向不完整类型的指针

c - scanf() 在 printf() 之前是如何执行的

c - 将指针传递给函数中的已初始化结构

c - 如何为我的操作系统读取和播放音频文件?

windows - 如何通过扫描码(不是虚拟键码)获取键状态?

c - 程序未退出

c - 在 c-99 中使用快速排序

linux - 如何更改/proc/self/pagemap 文件的权限。?

java - 为什么当操作系统代表时java会承担线程切换的开销

使用 `pthread_create` 创建用户级线程或内核级线程?