unix中,程序的的空间分配

来源:互联网 发布:不属于云计算的价值 编辑:程序博客网 时间:2024/04/28 02:47

  通常情况下,往往忽视程序运行的细节,而内核却是严格的控制程序的运行空间,而我们却经常的忽视它的细节,如果在多线程编程中,这些细节确实不能忽视的,那么内核是怎么管理程序的运行空间的? 

    内核会给每个运行的程序一个自己的运行空间,也就是内存中的一段区域,这段区域的大小是由程序的代码量和程序的数据量决定的,程序需要存放要运行的代码、数据、堆、栈。

         

 test段/code段:,这里的正文区,就是存放代码的地方,而
 DATA段: 初始化数据区,就是存放我们平常说的全局变量,需要注意的是这里存储的全局变量必须是带有初始化值的全局变量,也就是在任何函数外边定义的变量。
    BSS段:而未初始化的全局变量会存储在BSS段,同时平常定义的static型的数据也存储在BSS段,如果你在函数中使用exec函数族,那么调用函数的一些信息也会存放在这块区域,
    而堆区,就是是用malloc()、ralloc()此类函数的时候,申请的存储区域。
    至于栈区,这个大家都比较熟悉了,如果你要在函数内调用函数,在执行被调用函数前,主函数的相关信息换放在这块区域。最顶部的命令行和环境变量区,这个在linux系统中,是非常重要的,我们平常写的程序不太符合内核的要求,内核需要每个函数都要返回值,通过这个返回值,来知道这个函数的执行情况,对与每个main()函数,定义应该为 :  int main( int argv,void *argv);main函数的这两个参数就会存放在这块区域,同时,调用函数的shell 相关信息也会在这块区域中找到。 总结下,栈区存放的主要定义的局部变量、保存运行的上下文信息、和一些函数调用的行参。
阅读(477) | 评论(0) | 转发(0) |
0

上一篇:pthread_create

下一篇:三月的最后一周

相关热门文章
  • 万维网之父:警惕政府正在接管...
  • 宅急送代收货款 慢性湿疹...
  • 神经性皮炎 麻将
  • 骰子 邮政代收货款的好处...
  • www.fenghuangyulepingtai.com...
  • linux 常见服务端口
  • 什么是shell
  • linux socket的bug??
  • linux的线程是否受到了保护?...
  • 一个适用于windows和linux的抓...
  • debian7系统与ATI X2300显卡...
  • ubuntu sysklogd之配置文件介...
  • 自己用的ubuntu环境搭建(一)...
  • linux 学习心得
  • 用户输入操作和数据的显示...
给主人留下些什么吧!~~
原创粉丝点击