百科问答小站 logo
百科问答小站 font logo



进程的堆栈区和%esp的堆栈是否是一个概念? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

纠正几个说法:

1. 堆栈是分开的概念,堆是堆,栈是栈。
2. 栈是针对线程的,不是针对进程的。
3. 并没有堆栈区一说,甚至同一个进程的不同线程的栈也未必集中在同一块区域。

不过题主问到的栈是不是一个抽象的概念,这个回答是肯定的,是的,栈就是一个抽象的概念,CPU不关注栈在什么地方,CPU不关注栈是否连续。栈空间固定大小,纯粹是操作系统的原因:方便管理,节约内存。

各种加壳软件一般也是在栈指针上做文章,使得调试器无法很容易的定位到函数的入口。

从软件的角度来看:编译器和调试器规定的栈帧(stack frame)只是为了调试方便定义的,如果技术能力足够,用不用sp指针都无所谓。

实际情况中,栈还是有必要的,因为操作系统中,中断、系统调用这些都需要栈来支撑,这是硬件规定的,否则操作系统不容易恢复现场。

自己申请一大块内存,然后把栈帧指过去(包括sp和bp),这样也是能工作的,但因为自己申请的内存未必有操作系统提供的保护,栈越界、溢出时未必容易定位。

最后再强调,堆栈是分开的两个概念,当然,两个都是抽象概念。




  

相关话题

  为什么每款 ARM 电脑都需要专门为它编译的内核,而 x86 的可以通用? 
  为什么win7,win10很多人用,win8,win8.1却无人问津? 
  如何评价雷电 OS? 
  鸿蒙手机来了,如果可能,你会选择鸿蒙操作系统放弃安卓吗? 
  SpaceX 龙飞船中的新触控交互操作系统,意味着什么? 
  Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗? 
  【内存寻址】请问每个进程的线性空间是独立的吗还是系统中所有的进程共享一个线性空间? 
  Windows 7用的时间久了变慢怎么办? 
  操作系统能不能继续分两部分:硬件相关和硬件无关?并且让驱动只依赖硬件相关部分而不依赖操作系统? 
  我们为什么不尽早施行国产 CPU+国产 Linux 系统战略呢? 

前一个讨论
CPU有x86/ARM/MIPS等指令架构,那其他专用芯片有没有专用架构?
下一个讨论
为什么一般操作系统中应用程序的栈空间都要设最大值,不支持动态扩展?





© 2025-01-30 - tinynew.org. All Rights Reserved.
© 2025-01-30 - tinynew.org. 保留所有权利