加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 叉 – 相同的内存地址?

发布时间:2020-12-16 05:22:11 所属栏目:百科 来源:网络整理
导读:这是关于C在 Linux. 我在main()中有fork(),我创建2个子进程.然后,在两个子进程中运行一个函数abc(),其中有一个局部变量x.我写了一些价值.然后我用printf(“%p”, x)打印这个变量的地址. 两个进程打印同一地址.我以为每个孩子得到父母记忆的(独立)副本.我需
这是关于C在 Linux.

我在main()中有fork(),我创建2个子进程.然后,在两个子进程中运行一个函数abc(),其中有一个局部变量x.我写了一些价值.然后我用printf(“%p”,& x)打印这个变量的地址.

两个进程打印同一地址.我以为每个孩子得到父母记忆的(独立)副本.我需要每个进程都有自己的变量x.我该怎么做,或者我做错了?

解决方法

您需要了解物理内存与进程的虚拟地址空间之间存在断开连接.

每个进程都拥有自己的4G虚拟地址空间,操作系统和硬件内存管理器的工作就是将虚拟地址映射到物理地址空间.

所以,虽然看起来两个进程对变量有相同的地址,但这只是虚拟地址.

内存管理器将映射到完全不同的物理地址.

这个映射也可以让你运行10个进程,每个进程占用1G,即使你的机器只有4G的物理内存.操作系统可以将您的内存的一部分交换到磁盘,并在尝试使用它们时将其重新插入.

a:大多数情况下,这是真的.如果您在进程之间分享内容,它可能会映射到相同的物理地址.例如,共享内存,内核代码和数据,动态库等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读