C语言跨文件全局变量共享疑问:多次运行程序为何未保留值?
现有文件内容
main.c
#include <stdio.h> #include "library.h" int main() { print(); add_one(); print(); return 0; }
main2.c
#include <stdio.h> #include "library.h" int main() { print(); add_one(); print(); return 0; }
library.c
#include <stdio.h> #include "library.h" int number = 0; void add_one(){ number++; } void print() { printf("number: %d\n", number); }
library.h
extern int number; void add_one(); void print();
问题描述
先运行main程序,再运行main2程序,两者的输出均为:
number: 0 number: 1
预期main程序输出上述结果,但main2程序应输出number: 1、number: 2,请问这是为什么?
原因分析
main和main2是两个独立的可执行程序,运行时会被操作系统加载为完全独立的进程,每个进程拥有自己专属的内存空间,进程之间的内存是完全隔离的。
- 运行
main时,它的进程会初始化自己内存空间里的number变量为0,执行add_one()后变量变为1,程序退出后,操作系统会回收该进程的所有内存资源。 - 运行
main2时,操作系统会为它分配全新的内存空间,library.c中的number会被重新初始化为0,后续执行逻辑和main完全一致,所以输出结果相同。
进程之间不会自动共享内存数据,除非使用专门的进程间通信(IPC)机制(比如共享内存、管道等),否则两个程序的变量状态互不影响。
内容的提问来源于stack exchange,提问作者Alex_M
相关产品推荐
相关产品推荐

