一个虚拟地址空间中的进程线程如何进行内存管理?

我知道线程共享代码/全局数据,但有不同的堆栈。 每个线程都有自己的堆栈。 我相信每个进程都有一个虚拟地址空间。 这意味着每个线程都使用这个虚拟地址空间。

我想知道如何在虚拟地址空间中有多个线程的情况下堆栈/堆的增长? 如果一个线程的堆栈空间已满,OS如何管理?


在linux中,如果超过了堆栈溢出发生时,堆栈大小由guardsize决定。

程序员负责照顾计算器。 默认的保护值等于系统中定义的页面大小。


事实上,操作系统的内存管理器会为每个进程创建一个虚拟内存空间(进程具有不同的内存空间;线程在进程内共享相同的内存空间)。

在线程的内存空间内,每个线程都有自己的堆栈。 但是,它们共享相同的堆,并使用巧妙的内存管理技术来优化堆栈的共享使用(请参阅内存分配/解除分配瓶颈?作为起点)。

如果一个线程的堆栈空间已满,OS如何管理?

操作系统不管理堆栈。 该堆栈是由编译器创建的静态数据结构。 堆栈的内存分配和内存释放由编译器管理,并且随时知道堆栈的大小。 因此,它可以将内存空间的静态内存区域(即整个“堆栈”)拆分为线程“子堆栈”。

链接地址: http://www.djcxy.com/p/80261.html

上一篇: How memory management happens for process threads in one virtual address space?

下一篇: Segfault with ulimit