让我们想一下使用分段的操作系统
我的问题是:os是否接受了堆栈指针的每个变化
并且非常(或非常不稳定地)在物理记忆中分配/释放空间
或者它使用一个聪明的策略来分配比你需要的内存更多的内存,只有当释放的内存达到一定数量时才解除内存?
我希望我的讨论足够明确。
答案 0 :(得分:1)
如果我理解你的要求是正确的,答案如下:
操作系统在创建进程开始时为堆栈分配一定量的空间。当堆栈操作发生时,处理器自动递增和递减堆栈指针,并且软件递减堆栈指针以为临时数据分配空间(如在函数调用中)。它会递减,因为堆栈实际上会减少,如果指针超出给定的分配空间,则会发生堆栈溢出。分配的空间量因系统而异。操作系统可以做的唯一可能的“技巧”是分页,它可以将内存标记为已分配,但在软件使用它之前不会实际分配物理内存。这称为请求分页,并且具有更多应用程序,而不是堆栈。
答案 1 :(得分:0)
另外还要添加上述答案。
进程的堆栈向堆增长,操作系统必须确保这些区域不重叠
当堆栈需要更多空间(即堆栈指针指向非法/未分配的内存)时,会导致页面错误。