这是关于 Linux 中的 C 语言。
I have fork()
in main()
我在其中创建了 2 个子进程。然后,在两个子进程中运行该函数abc()
,其中有一个局部变量x
。我在里面写了一些值。然后我打印这个变量的地址printf("%p",&x)
.
两个进程打印相同的地址。我认为每个孩子都会获得父母记忆的(独立)副本。我需要每个进程都有自己的变量x
。我该怎么做或者我做错了什么?
您需要了解物理内存和进程的虚拟地址空间之间存在脱节。
每个流程都有它的作用own4G 虚拟地址空间,操作系统和硬件内存管理器的工作是将虚拟地址映射到物理地址。
所以,虽然可能seem两个进程具有相同的变量地址,这只是virtual地址。
The memory manager will map that to a totally different physical addressa.
这种映射还允许您运行 10 个进程,每个进程占用 1G,即使您的机器只有 4G 物理内存。操作系统可以将内存的一些部分交换到磁盘上,并在您尝试使用它们时将它们带回磁盘。
a: Mostly, this is true. It may map to the same physical address if you're sharing stuff between processes. For example, shared memory, kernel code and data, dynamic libraries and so forth.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)