Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264506
  • 博文数量: 52
  • 博客积分: 406
  • 博客等级: 一等列兵
  • 技术积分: 549
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-21 12:34
个人简介

......

文章分类

全部博文(52)

文章存档

2014年(1)

2013年(32)

2012年(19)

我的朋友

分类: LINUX

2013-07-01 22:34:32

任何事物都是由比它更小的单位组成的,从物理学的角度来说就是什么原子(不知道现在对不对,学物理的尽管拍砖,哈哈), 一个汽车由4个轮子,发动机,底盘,车身,电气设备等组成,作为一个程序员应该知道一个程序有哪些部分组成的,不然......

1. text段, 就是代码段了,直观上看就是你码上去的东西,吧嗒吧嗒..... 因为你码上去编译之后就交给OS运行了,你不能在人家OS上运行中修改它吧,所以这个段是只读的
2. data段,data就是数据了,数据段, 顾名思义它里面存的是数据,这个数据是初始化的全局变量,初始化的用static修饰的变量也放在这里,会占用程序文本空间
    int a[1024*1024] = {1};
    void main (void)
    {
            printf("hello world\n");
     }
     编译出来的可执行文件大小为4.1M
3. bss段, bss: block started by symbol , 直译过来就是从符号开始的块, 它里面存储的是未初始化的全局变量,但不会占用程序文本空间 ?
    int a[1024*1024];
    void main (void)
    {
            printf("hello world\n");
     }
     编译出来的可执行文件大小为6.0K    去掉那个全局变量a编译出来的大小也是6.0K
4. heap 堆,用malloc分配的内存就是它了,这个是在程序运行过程中动态分配的,所以不会占用程序文本空间
5. stack 栈,这里面存放的是临时变量,也就是你在函数中 int a; a就放在栈里,另外函数的形参也放在这里



阅读(4109) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~