多线程中栈空间的分配 http://biancheng.dnbcw.info/linux/303270.html

转载 2015年11月19日 13:11:56
有一个问题,在LinuxThread线程模型的实现中,管理线程的栈与其它线程的栈之间是什么关系?
在回答这些问题前,让我们先看一下Linux的内存空间模型:
从上图可提取以下三点信息:
  1. 进程栈空间从0xC0000000往下进行分配
  2. 运行时堆通过malloc进行分配,位置处于.bss与0x40000000之间
  3. 在Glibc的malloc中,对于小于128k的需求,直接从堆中分配,而大于128k的需求则通过mmap从文件映射区之后分配,因此地址会大于0x40000000.

因此,对于以LinuxThread实现的多线程而言,要区分以下两种情况:

  1. 管理线程,管理线程的堆栈与普通进程无异,即以上提到的三点
  2. 普通线程,因为管理线程会在进程堆中申请一块空间(THREAD_MANAGER_STACK_SIZE=8M?)当作自已的运行栈,而我们知道,大于128k的malloc会采用mmap方式从文件映射区之后分配,所以,普通线程的栈地址就在这个空间内,即大于0x40000000

对于NPTL,因其不使用管理线程,因此,该进程中所有的线程都在小于0xC0000000的栈区,只不过,每个线程在这个大栈区使用不同的小块而已.

手动测试和修改多线程中栈空间大小。

每个线程都有一个堆栈那么,这个堆栈多大呢? HANDLE CreateThread(        LPSECURITY_ATTRIBUTES lpThreadAttributes,        ...

【Linux环境编程】内存管理:函数栈空间,虚拟内存及其分配

一.函数调用栈空间的分配与释放 函数执行时有自己的临时栈空间,c++成员函数有两个临时栈空间,一个是成员函数的还有一个是对象的。 函数的参数是压进临时栈中,传递的实参用来初始化临时栈中的形参。 ...

多线程 栈空间变量 可见性

今天看couchbase 回调代码的时候发现 callback 函数有一个参数是 cookie,相当于一个调用异步函数时的上下文。 http://docs.couchbase.com/develop...
  • wschli
  • wschli
  • 2015年05月08日 22:23
  • 767

linux下栈空间大小(ulimit)

linux下栈空间大小 第一次写博客,很多地方写的不好请多见谅,希望这篇文章对大家有帮助。     首先说下为什么会写linux下栈空间大小这个内容。在评审同事代码的时候发现代码中有两个函数互相调用...

windows和linux中程序栈空间

一般来说,我们所用的内存有栈和堆之分,其它的我们很少控制,栈的速度快,但是空间小、不灵活;而堆的空间几乎可以满足任何要求、灵活,但是相对的速度要慢了很多,并且在VC中堆是人为控制的,new了就要del...

Linux栈空间及栈地址方向

写了个简单程序,可以让linux的栈空间耗尽,然后出现core dumped,即栈溢出 代码如下: #include void overFlow() {     long i;     printf...

java虚拟机 jvm 出入java栈 栈空间内存分配

java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关。线程最基本的执行行为就是函数的调用。每次函数调用其实是通过java栈传递数据的。 数据结构中...

linux中C程序运行时怪异的段错误--linux中因栈空间不足而出现的运行时段错误

linux中C程序段错误 怪异 段错误 linux中因栈空间不足 运行时段错误

http://www.mamicode.com/info-detail-1150460.html

1.常见行为数据库: 网址链接1:http://www.cs.utexas.edu/~chaoyeh/web_action_data/dataset_list.html#List_of_data_s...

利用尾递归减少栈空间的消耗

首先,需要给出一个定义,什么是尾递归。在《算法精解》中给出的定义如下:      如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程中栈空间的分配 http://biancheng.dnbcw.info/linux/303270.html
举报原因:
原因补充:

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