全局变量位于C的激活记录中吗?

问题描述 投票:0回答:1

在C中,每个功能都有一个激活记录,该记录分配在堆栈帧上。局部变量分配在它们自己的函数的激活记录中。那么,全局变量是什么情况?他们在哪里分配?

例如

#include <stdio.h>
    int a;

    void v()
    {a= 2;
    int b;
    b++;
    }

    main()
    {
    int f;
    printf("\n%d",a);
    v();
    }


-----Activation record----

-------------------
-------------------
activation record for main
-------------------
int f
-------------------
-------------------
activation record of v
--------------------
int a
--------------------
int b
--------------------
---------------

变量x存储在哪里?根据激活记录逻辑。

c global-variables activation-record
1个回答
0
投票

[globals通常在call stack上通常不存在(用于保存呼叫帧或激活记录)。

C11规范不需要任何调用堆栈。通过阅读n1570进行检查。某些实现不使用任何调用堆栈(或激活记录)。

阅读linkers and loaders了解更多。

在Linux上,尝试cat /proc/self/maps了解运行该cat命令的进程的虚拟地址空间

© www.soinside.com 2019 - 2024. All rights reserved.