任何事物都是由比它更小的单位组成的,从物理学的角度来说就是什么原子(不知道现在对不对,学物理的尽管拍砖,哈哈), 一个汽车由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就放在栈里,另外函数的形参也放在这里
阅读(4146) | 评论(1) | 转发(0) |