根据我对全局变量和静态变量的了解,如果 C 变量在源文件中的所有函数之外声明为:
int a;
一旦该变量在该文件中有一个 extern 声明,其他文件就可以访问该变量。
但是如果相同的变量被声明为:
static int a;
那么这个变量只能被当前文件使用,任何其他文件都看不到这个变量。
当程序在运行时加载到内存中时,全局变量和静态变量都存在于该程序的数据部分中。
我想了解,由于两者都存储在同一个内存段中,如何保护静态变量不被用于超出其范围的任何指令。
我认为变量的范围及其访问将由编译器处理。如果我错了,请发表评论,如果我遗漏任何细节,请添加。关于外部变量。如果,
int a;
在文件 file1.c 中定义并在文件 file2.c 中声明为:
extern int a;
这两个文件属于不同的进程,分别是 process1 和 process2。因此,当 process1 正在运行并且它的地址空间被加载到内存中时,它的数据段变量“a”将可用。
我这里有个疑问,就是process2运行的时候,这个变量会不会也加载到process2的data段呢?或如何管理。
请帮助我清除我上面提到的疑虑。我在网上搜索并阅读了几篇文章,需要确认我是否理解正确。
Aso,请给我推荐一篇好的文章或书籍,这将有助于我清楚地理解上述概念。