前端之家收集整理的这篇文章主要介绍了
c – 叉 – 相同的内存地址?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是关于C在
Linux.
我在main()中有fork(),我创建2个子进程.然后,在两个子进程中运行一个函数abc(),其中有一个局部变量x.我写了一些价值.然后我用printf(“%p”,& x)打印这个变量的地址.
两个进程打印同一地址.我以为每个孩子得到父母记忆的(独立)副本.我需要每个进程都有自己的变量x.我该怎么做,或者我做错了?
您需要了解物理内存与进程的虚拟地址空间之间存在断开连接.
每个进程都拥有自己的4G虚拟地址空间,操作系统和硬件内存管理器的工作就是将虚拟地址映射到物理地址空间.
所以,虽然看起来两个进程对变量有相同的地址,但这只是虚拟地址.
内存管理器将映射到完全不同的物理地址.
这个映射也可以让你运行10个进程,每个进程占用1G,即使你的机器只有4G的物理内存.操作系统可以将您的内存的一部分交换到磁盘,并在尝试使用它们时将其重新插入.
a:大多数情况下,这是真的.如果您在进程之间分享内容,它可能会映射到相同的物理地址.例如,共享内存,内核代码和数据,动态库等.
原文链接:https://www.f2er.com/c/114849.html