首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程:堆栈在物理内存上可能重叠吗?

多线程:堆栈在物理内存上可能重叠吗?
EN

Stack Overflow用户
提问于 2019-11-28 02:03:45
回答 1查看 181关注 0票数 1

我被告知,同一个进程中的线程共享相同的物理内存空间和相同的虚拟内存地址,每个线程都有自己的功能堆栈。

也就是说,我有两个线程,t1t2。如果我是对的,t1堆栈的虚拟内存地址可能是从0x00000x0011,而t2堆栈的虚拟内存地址可能是从0x01000x0111。总之,它们的虚拟内存地址不重叠。

所以我有一个问题:他们如何共享相同的物理记忆?t1t2可能位于物理内存的同一部分吗?如果这是可能的话,这是否意味着当内容切换到t1时,操作系统必须存储t2的堆栈?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-29 11:45:35

  1. 当我们说the same process share the same physical memory space and the same virtual memory addresses时,它实际上意味着同一个进程共享相同的物理内存空间和相同的虚拟内存地址,不同的进程有不同的物理内存空间,即进程A除了共享内存之外不能修改/访问进程B的物理内存空间。对于每个进程,这个受保护的独立内存段由内存管理单元(MMU).
  2. 实现,当我们说threads share the same physical memory时。这意味着所有线程都有相同的地址空间,这意味着它们也共享相同的全局变量。每个线程都可以访问进程地址空间中的每个内存地址,线程A可以读取、写入甚至完全删除线程B的堆栈。
  3. 返回到问题:How do threads share the same physical memory? For LinuxThreads,它使用(CLONE_VM \x CLONE_FS \ CLONE_FILES /CLONE_FILES)参数调用LinuxThreads ()来创建“线程”,这意味着共享内存、共享文件系统访问计数、共享文件描述符表和共享信号处理。http://man7.org/linux/man-pages/man2/clone.2.html线程之间的区别是程序计数器(跟踪要执行下一步的指令)、寄存器(保存其当前工作变量)、线程堆栈(包含执行历史)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59080778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档