繁体   English   中英

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

[英]How memory management happens for process threads in one virtual address space?

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

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

在linux中,当guardsize超过堆栈大小时,堆栈大小由guardsize决定。

照顾堆栈溢出是程序员的责任。 默认的guardsize值等于系统中定义的页面大小。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM