Linux进程学习笔记一

1、进程的地址空间

① 通过打印地址查看数据保存的位置:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

int INIT_GLOBAL_VALUE1 = 0;
int INIT_GLOBAL_VALUE2 = 0;
int INIT_GLOBAL_VALUE3 = 0;
int INIT_GLOBAL_VALUE4 = 0;
int INIT_GLOBAL_VALUE5 = 0;
int INIT_GLOBAL_VALUE6 = 0;

int UNINIT_GLOBAL_VALUE1;
int UNINIT_GLOBAL_VALUE2;
int UNINIT_GLOBAL_VALUE3;
int UNINIT_GLOBAL_VALUE4;
int UNINIT_GLOBAL_VALUE5;
int UNINIT_GLOBAL_VALUE6;

int main(int argc,char* argv[],char* env[])
{
    int val_stack = 10;
    int *heap = NULL;
    heap = (int *)malloc(sizeof(int)*5);

    /*打印存储在text代码段的地址*/
    printf("\naddress of printf is %p\n",printf);
    printf("address of  main  is %p\n\n",main);
    
    /*打印存储在.data处的初始化数据*/
    printf("address of INIT_GLOBAL_VALUE1 is %p\n",&INIT_GLOBAL_VALUE1);  
    printf("address of INIT_GLOBAL_VALUE2 is %p\n",&INIT_GLOBAL_VALUE2);
    printf("address of INIT_GLOBAL_VALUE3 is %p\n",&INIT_GLOBAL_VALUE3);
    printf("address of INIT_GLOBAL_VALUE4 is %p\n",&INIT_GLOBAL_VALUE4);  
    printf("address of INIT_GLOBAL_VALUE5 is %p\n",&INIT_GLOBAL_VALUE5);
    printf("address of INIT_GLOBAL_VALUE6 is %p\n\n",&INIT_GLOBAL_VALUE6);

    /*打印存储在.bss处的未初始化数据*/
    printf("address of UNINIT_GLOBAL_VALUE1 is %p\n",&UNINIT_GLOBAL_VALUE1);
    printf("address of UNINIT_GLOBAL_VALUE2 is %p\n",&UNINIT_GLOBAL_VALUE2);
    printf("address of UNINIT_GLOBAL_VALUE3 is %p\n",&UNINIT_GLOBAL_VALUE3);
    printf("address of UNINIT_GLOBAL_VALUE4 is %p\n",&UNINIT_GLOBAL_VALUE4);
    printf("address of UNINIT_GLOBAL_VALUE5 is %p\n",&UNINIT_GLOBAL_VALUE5);
    printf("address of UNINIT_GLOBAL_VALUE6 is %p\n\n",&UNINIT_GLOBAL_VALUE6);    
    
    /*打印堆区*/
    printf("address of heap is %p\n\n",heap);

    /*打印栈区*/
    printf("address of val_stack is %p\n\n",&val_stack);
    free(heap);
    heap = NULL;

    /*打印命令行参数*/
    printf("argv[%d]:%p\n\n",0,argv[0]);

    /*打印环境变量*/
    printf("env[%d]:%p\n",0,env[0]);    

    return 0;
}

posted on 2022-11-27 20:04  轩邈、  阅读(36)  评论(0编辑  收藏  举报

导航