关于多线程栈空间的若干问题

转载 2012年03月30日 22:36:33
1.一个进程应该有自己独立的进程空间。

应当说每个进程各自拥有其独立的地址空间.都是虚地址,在32位机上都是0-4G

2. 而创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?

栈应当是一个动态地概念,只有在线程开始执行后,才为其分配栈资源.具体的分布是无法确定的.我觉得这就像
调用函数一样,当调用函数时,进程通过调整栈基址指针寄存器和栈顶指针寄存器,为函数分配了一个栈空间.
能够确定的是,这片空间肯定是在进程的栈区内划分出来的一片地址空间.

单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.


是否都是在一个线性地址空间内呢?

在同一个进程内,就在同一线性地址空间内.


但也因为线程共用栈空间,产生很多同步问题

同步问题不是由此引入的.
进程内的线程共享进程的栈空间,但在栈空间内,每一线程都有其独立的栈区.

多线程编程时,需要进行同步访问的数据有三种,一种是全局变量,一种是动态分配的变量,还有一种是函数内的局部静态变量,这三种类型的变量都不存在于栈里面.

相关文章推荐

线程栈空间的大小

一直做Windows服务器向Linux平台的移植工作,对于线程的栈空间也是似懂非懂,因而出现了一些问题和总结了部分经验,供大家分享。 在我的服务器上启动了286个线程后,其后的线程启动失败了,返回的...

说说Linux线程的栈空间

刚接触C编程时, 比较喜欢用局部变量, 因为局部变量是在栈上分配的, 会自动释放, 不会造成内存泄漏, 碎片什么的,觉得比malloc/new 出来的 堆内存好使多了,大家可能说malloc/ne...

线程堆栈大小的使用介绍

先来讲说线程内存相关的东西,主要有下面几条: 进程中的所有的线程共享相同的地址空间。任何声明为 static/extern 的变量或者堆变量可以被进程内所有的线程读写。一个线程真正拥有的...

多线程 - 你知道线程栈吗

问题 1. local 变量的压栈和出栈过程 void func1(){     int a = 0;     int b = 0; } 系统中有一个栈顶指针,每次分配和回收local 变...
  • Gykimo
  • Gykimo
  • 2013-06-20 22:48
  • 11210

Linux虚拟地址空间布局以及进程栈和线程栈总结

本文转自多个博客,以及最后有我的总结。我们有单独从头到尾写一个总结的原因是别人已经写得很好了,我不花大量时间是无法达到这水平的。 一:Linux虚拟地址空间布局 (转自:Linux虚拟地址空间布局...

有关线程地址空间

每个线程都有自己的堆栈空间,但是

指针在子函数中分配空间若干问题

如果想要在子函数中为指针分配空间,那么参数应该是指针,还是指针的引用呢?0、知识储备:指针与cout#include #include #include using namespace std;int...

嵌入式系统中关于程序中线程栈空间的使用

嵌入式系统中关于程序中线程栈空间的使用

网格Cache若干问题分析.pdf

  • 2014-09-20 14:39
  • 314KB
  • 下载

视频监控的若干问题

  • 2014-07-30 20:32
  • 2.34MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)