首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对一个虚拟地址空间中的进程线程进行内存管理?

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

Stack Overflow用户
提问于 2016-07-25 02:22:12
回答 2查看 596关注 0票数 0

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

我想知道在虚拟地址空间中有多个线程的情况下堆栈/堆是如何增长的?操作系统如何管理一个线程的堆栈空间是否已满?

EN

回答 2

Stack Overflow用户

发布于 2016-07-27 21:44:27

在linux中,堆栈的大小由guardsize决定,如果超过了防护大小,就会发生堆栈溢出。

处理堆栈溢出是程序员的责任。默认防护大小值等于系统中定义的页面大小。

票数 2
EN

Stack Overflow用户

发布于 2016-07-25 02:34:28

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

在线程的内存空间中,每个线程都有自己的堆栈。但是,它们共享相同的堆,并使用智能的内存管理技术来优化堆栈的共享使用(请参阅Memory Allocation/Deallocation Bottleneck?作为起点)。

操作系统如何管理一个线程的堆栈空间是否已满?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38555287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档