作者 主题: 数据区,代码区,堆栈区,操作系统堆栈  (阅读 9327 次)

wq06100610

  • 版主
  • 新手
  • *
  • 帖子: 5
  • 评价: +0/-0
数据区,代码区,堆栈区,操作系统堆栈
« 于: 2005年11月26日,21:44:13 »
我们编译的二进制代码就放在代码区,而我们malloc的内存,全局变量等,就放在数据区,而函数的参数以及函数的局部变量,就放在堆栈区。之所以函数的参数和函数的局部变量放在堆栈区,是因为函数执行完毕后,需要有一个弹栈的过程,也就是这些东西是局部的,函数一运行完,将会随之消失。函数堆栈是层层分配的,调用了一个函数后,会将返回点压栈,新调用的函数紧跟着分配栈空间,等这个函数执行完毕后,将会取出返回点的指令。如果函数调用非常深的话,会导致堆栈溢出,也就是不推荐使用递归算法。C语言中,我们malloc的内存,是不负责回收的,是统一放在一个叫堆的地方,所以如果我们不free的话,将会内存泄漏。当然,以上的观点只是针对代码级来说,对于操作系统,对进程的内存会统一回收,此是后话。操作系统的堆栈是怎么回事呢?我们一定听过系统调用,软中断等词语,操作系统有自己的堆栈,是不允许任务随便访问的,只要调用操作系统提供的函数,这时控制权将交由操作系统接管,进行后续的操作。

流溪(Ben)

  • 管理员
  • 超级会员
  • *
  • 帖子: 2,784
  • 评价: +43/-23
  • SMF.CN 执行
    • 广州SEO
Re: 数据区,代码区,堆栈区,操作系统堆栈
« 回复 #1 于: 2005年11月26日,23:20:36 »
恩,挺好,说的。
可惜现在我没在弄c和windows编程啊。
->关于我及博客:http://www.fmben.com/
->SMF中文推广站:http://www.smf.cn
->广州SEO:http://www.touchss.com
这个年头,活着就是一个奇迹。
网络的意义在于分享与认可,人人为我,我为人人。珍惜生命,远离QQ!
互助协议(临时)