linux C复习:进程空间组成

来源:互联网 发布:易语言手机版远控源码 编辑:程序博客网 时间:2024/04/30 10:20

当一个程序被调入内存中执行时,会变成一个进程,此进程的空间被划分成以下几个区域:

1)代码区:

   代码区是只读的,程序代码会被读入此区,程序执行期间执行的就是代码区中的代码。

2)全局区:

   除了代码区外,其它区都是可读可写的,全局区用来给全局变量分配空间

3)BSS段:

   紧接着全局区是BSS段,给没有初始化的全局变量赋初始值0

4)堆区:

   使用malloc、new... 分配的空间(也叫自由区)

5)栈区:

   给局部变量(自动变量)分配空间的地方

 

#include <stdio.h>#include <stdlib.h>int i1 = 10;                          //全局区int i2 = 20;                          //全局区int i3;                               //BSS段static int i4 = 40;                   //全局区const int i5 = 50;                    //代码区void func(int i6)                     //i6栈区{    int i7 = 70;                      //栈区    static int i8 = 80;               //全局区    const int i9 = 90;                //栈区    char *str = "abcdef";             //代码区    char str2[] = "ABCDEF";           //栈区    int *pi = malloc(4);              //堆区    printf("========================\n");    printf("i6 = %p\n",&i6);    printf("i7 = %p\n",&i7);    printf("i8 = %p\n",&i8);    printf("i9 = %p\n",&i9);    printf("str = %p\n",str);    printf("str2 = %p\n",str2);    printf("pi = %p\n",pi);}int main(){    printf("i1 = %p\n",&i1);    printf("i2 = %p\n",&i2);    printf("i3 = %p\n",&i3);    printf("i4 = %p\n",&i4);    printf("i5 = %p\n",&i5);    func(22);    while(1);}


 

0 0
原创粉丝点击