每个线程有自己单独的栈吗 多线程中栈与堆是公有的还是私有的?
浏览量:2477
时间:2021-03-13 01:49:35
作者:admin
多线程中栈与堆是公有的还是私有的?
在多线程环境中,每个线程都有一个堆栈和一个程序计数器。
堆栈和程序计数器用于保存线程的执行历史和线程的执行状态。它们是线程的私有资源。其他资源(如堆、地址空间、全局变量)由同一进程中的多个线程共享。
线程栈和进程栈有什么区别?
要弄清楚线程堆栈和进程堆栈的区别,首先要弄清楚线程和进程之间的关系。线程和进程之间有许多相似之处。人们通常称线程为轻量级进程。这个所谓的轻量级进程意味着线程没有自己的系统资源,线程附加到创建它们的进程。我们可以从两个方面来理解线程的轻量级:1。由于进程之间的线程共享同一个进程地址空间,进程之间的进程切换不会引起进程地址空间的切换,从而避免了昂贵的进程切换。当然,不同进程组之间需要进行进程切换。2有资源的进程是操作系统中拥有资源的独立单元。创建和取消进程时,操作系统会为进程分配和回收资源,包括地址空间、文件、IO、页表等。但由于线程附加到进程并创建进程,因此线程的代码段、数据段、打开文件、IO资源、地址空间、页表与所有线程共享整个过程。从上面我们可以看出,一个线程没有独立的地址空间,这意味着属于同一进程的所有线程堆栈都在它们所属进程的地址空间中,并且它们的堆栈地址是不同的。但是,如果在操作期间堆栈交叉,则可能会破坏其他线程的堆栈空间。实际上,一个进程可以看作是一个主线程,它的堆栈与其他线程没有什么不同。单个线程只有一个堆栈,而多线程为每个线程分配一个堆栈,并且这些堆栈的地址不同。这一结论可以通过以下方法加以验证。1PsList输出系统进程及其线程,并在我的机器上获得以下结果
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。
下一篇
qt窗口移动 qt开发