Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1611869
  • 博文数量: 245
  • 博客积分: 10378
  • 博客等级: 上将
  • 技术积分: 2571
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 08:19
文章分类

全部博文(245)

文章存档

2013年(4)

2012年(8)

2011年(13)

2010年(68)

2009年(152)

分类: LINUX

2009-03-28 16:08:38

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

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

         

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

上一篇:pthread_create

下一篇:三月的最后一周

给主人留下些什么吧!~~