+ -
当前位置:首页 → 问答吧 → 关于堆和栈段寄存器的疑问

关于堆和栈段寄存器的疑问

时间:2011-08-06

来源:互联网

各位大侠:
  最近想深入了解一下底层的东西,不过感觉中国人的语言比较难懂,比如:堆栈段寄存器也就是SS段寄存器,按照这个说法(堆栈段)则无论访问Stack还是heap应该都用此段寄存器。
  不过我觉得应该不是这样的。应该是访问Stack(也就是栈)的时候用SS段寄存器吧?那访问堆(Heap)内存呢?也就是访问malloc出来的内存用哪个段寄存器?是否是DS? 以上个人观点。
  Google大神也没发现详细讲解这一块的,所以特地来此宝地问一下。
  烦请各位高人给个指点。谢谢

作者: szpyc   发布时间: 2011-08-06


没详细找资料研究,我只知道 push pop 时用要视情用 sp或者esp,ebp,bp来寻址,需要有效地址时,我就用 lea 指令;

对malloc来的内存,我就按指针寻址规定寻址,我管它是栈还是堆,反正都是内存.

malloc来的内存需要用sp,esp,bp,ebp来寻址吗? 如果不需要的话? 即使malloc操作就是从系统保留的栈内存空间划来的,那又怎样呢? 

除非是为了育种,只要鸡蛋好吃,我管它是哪个鸡生的.


 


作者: gsy999   发布时间: 2011-08-06

我的理解:所有的内存寻址都需要通过段寄存器,不管是DS,CS,SS还是其他,只是这种寻址方式在上层看不出来,比如:对于全局数据要通过DS,Code数据要通过CS,栈上数据要通过SS等,但是对于堆内存我觉得应该是DS而不是SS,至于更根本的对于实模式和保护模式这些段寄存器的异同我还没有研究过,但就是在通过哪个段寄存器访问那些相关数据的对应关系上我还没有完全搞明白,只是有以上理解。
  请各位高手不吝赐教。谢谢

作者: szpyc   发布时间: 2011-08-06

windows上面都基本没有了 段 的概念了吧
看看GDT,DS,CS等都是0基址,大家都是使用2G空间

作者: WJN92   发布时间: 2011-08-06

热门下载

更多