C静态变量和linux fork

eat*_*mon 8 c linux memory fork shared-memory

嗨,我创建了一个服务器程序,在接受套接字连接后分叉新进程.程序中定义了几个静态分配的全局变量.我的问题是这些静态缓冲区在fork之后分配了两次吗?或者fork只复制堆和调用堆栈上的地址空间?

zwo*_*wol 10

整个地址空间被复制,其中包括所有的全局变量和程序文本.

  • @juxtapose:fork()程序时,所有发生的事情都是程序使用的内存在写入时被标记为copy.因此,在您开始写入内存之前,您的ram使用率不会开始上升,然后只有您编写的页面才会被取消共享. (6认同)

Nik*_*sov 6

整个地址空间在"重复"期间fork(2).它通常使用copy-on-write完成,并且有关于共享程序文本和库的更多详细信息,但这与此无关.父进程和子进程都以自己的静态数据副本结束.