首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按操作系统管理堆栈

按操作系统管理堆栈
EN

Stack Overflow用户
提问于 2016-08-28 16:28:04
回答 1查看 67关注 0票数 0

我在操作系统方面是一个绝对的初学者。所以,请不要介意这个问题看起来太天真或太基本了。据我所知,每个进程都有自己的内核堆栈和用户堆栈。每个线程也是如此。进程的线程共享相同的地址空间。它们还共享代码和数据段,但不共享堆栈。但这是怎么可能的呢?CPU中只有一个堆栈指针,那么每个线程怎么会有自己的堆栈呢?b/w堆栈和堆栈框架的区别是什么?据我所知,只有一个堆栈,并且帧被推送到它上面。再说一次,它是物理堆栈吗?这些堆栈是否存在于虚拟内存中?有没有人能澄清我的概念?我很困惑,无法继续前进。

EN

回答 1

Stack Overflow用户

发布于 2016-08-28 16:36:51

据我所知,每个进程都有自己的内核堆栈和用户堆栈。每个线程也是如此。

每个线程都有自己的内核和用户堆栈。进程可以包含任意数量的堆栈--每个线程至少有一个堆栈,甚至更多。

进程的

线程共享相同的地址空间。它们还共享代码和数据段,但不共享堆栈。但这是怎么可能的呢?

因为“分享”这个词有两种不同的用法。

我和我的妻子共同拥有两辆车,所以从这个意义上说,我们共享两辆车。但是我有一辆车只有我用,她也有一辆车只有她用。从这个意义上说,我们每个人都有自己的车。

类似地,具有两个线程的进程有两个共享的堆栈。一个用于每个线程。因此,每个线程都有自己的堆栈,尽管它们可以根据需要访问彼此的堆栈。

在CPU中只有一个堆栈指针,那么每个线程怎么会有自己的堆栈呢?

堆栈可以位于磁盘上。堆栈可以驻留在内存中,但不能用作堆栈。

和b/w堆栈和堆栈框架的区别是什么?据我所知,只有一个堆栈,并且帧被推送到它上面。

对,所以单个堆栈可能会有几个帧被推送到它上面。当一个函数完成时,它弹出其堆栈帧,并返回到调用方,调用方的框架位于堆栈的顶部。

,它是一个物理堆栈吗?

我不知道那是什么意思。

这些堆栈是否存在于虚拟内存中?

是。这就是为什么如果地址从一个线程传递到另一个线程,一个线程可以很容易地访问另一个线程堆栈上的变量。堆栈只是一些被用作堆栈的内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39189354

复制
相关文章

相似问题

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