• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Unix環境高級編程學習筆記---The Environment of a Unix Process

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    在學習進程控制之前,先了解一下單個進程的環境. 本章包括如下內容: 進程基本情況; 參數傳遞過程; 程序的內存分配及布局; 環境變量; 1.進程中止的五種方法: 正常中止: 從main返回, 調用exit和調用_exit 非正常中止:調用abort 以及被信號(signal)中止 exit
    在學習進程控制之前,先了解一下單個進程的環境.
    本章包括如下內容:
    進程基本情況;
    參數傳遞過程;
    程序的內存分配及布局;
    環境變量;

    1.進程中止的五種方法:
        正常中止: 從main返回,  調用exit和調用_exit
        非正常中止:調用abort 以及被信號(signal)中止

    exit與_exit的區別主要在,前者在退出程序前將關閉該進程所有打開的文件流等清理工作,然后返回內核,而后者則直接返回內核,不作任何清理工作.
    另外還有一個atexit函數,可以注冊一個函數在程序退出之前執行.
    #include
    int atexit(void (*func)(void));   //正確注冊返回0,否則返回非零值.
    一個程序可以多次利用atexit注冊多個函數,調用順序則是注冊順序的逆續.

    2.環境列表
    程序在執行之前,shell將向程序進程傳遞參數列表以及環境列表(environment list)
    環境列表是由字符指針組成的數組,這個數組的地址保存在一個全局環境變量中extern char **environ



    3.C程序的內存布局
    C程序包含五個內存部分
        Text segment:存放機器指令,該部分一般是多個程序共享,并且為只讀
        Initialized data segment: 存放被初始化的數據,如局部變量 int a = 1;
        Uninitialzed data segment : 存放未被初始化數據,如數組 char buffer[100];
        Stack: Automatic變量存放在堆棧中
        Heap: 動態內存分配在Heap中.



    4.內存分配
    在Ansi C中規定了三個內存分配函數:malloc, calloc, realloc (均在Heap中分配內存)
    #include
    void*malloc(size_t size);   //分配大小為size個字節的空間
    void *calloc(size_t nobj, size_t size);   //為指定個數的對象分配內存,每個對象大小為size字節,共分配nobj*size個字節
    void *realloc(void *ptr,size_t newsize); //重新分配Ptr所指內存塊的大小,newsize為調整后的空間大小

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>