主函式引數 緩衝區的理解

2021-09-12 23:24:04 字數 1720 閱讀 1754

1、主函式傳參

int main(int argc,char *ar**,char *envp);

argc:傳遞的引數列表中引數的個數

ar**:傳遞的引數列表

envp:傳遞的環境變數

可以看到,傳遞的引數以空格區分開,那麼傳整個字串可以寫進「字串」或者使用「\ 」轉義字元。

主函式預設接收乙個引數,就是執行的命令。

2、緩衝區的深入理解

#include#include#includeint main()

這個**執行時,並不是列印出「hello」,睡眠5秒鐘後,再列印「world」。而是將「hello」寫到輸出緩衝區中,睡眠5秒鐘後,再將「world」寫到輸出緩衝區中進而顯示到介面上。

緩衝區又稱為快取,它是記憶體空間的一部分,也就是說,在記憶體空間中預留了一定的儲存空間,用來緩衝輸入或輸出的資料,這部分預留的空間就是緩衝區。

為什麼引入緩衝區?

比如我們在磁碟讀取資料的時候,先把資料放在緩衝區中,計算機再直接從緩衝區讀取資料,等緩衝區中資料取完後再去磁碟讀取,這樣就可以大大減少對於磁碟的讀寫次數,再加上計算機對緩衝區的操作遠遠快於對磁碟的操作,所以應用緩衝區可以大大提高計算機的執行速度。

緩衝區就是一塊記憶體區,它用在輸入輸出裝置和cpu之間,用來快取資料。它使得低速的輸入輸出裝置和高速的cpu能夠協調工作,避免低速的輸入輸出裝置占用cpu,解放出cpu,使其能夠高效率工作。

輸出緩衝區重新整理的條件:

按照iso c規定,乙個程序可以登記多至32個函式,這些函式將由exit或者從main函式中返回時自動呼叫。我們稱這些函式為終止處理程式,並呼叫atexit函式來登記這些函式。

函式原型

int atexit(void (*function)(void))

返回值:若成功,返回0;若錯誤返回非0;

其中,atexit的引數是乙個函式位址,當呼叫此函式時無需向他傳遞任何引數,也不期望它返回乙個值。exit呼叫這些函式的順序與它們登記時候的順序相反。同一函式如若登記多次,也會被呼叫多次。

通過程式示例我們驗證得到:不管atexit的位置在哪,我們總是在程式正常結束前呼叫atexit所登記的函式,並且呼叫順序與登記順序相反,同一函式如若登記多次,也會被呼叫多次。

緩衝區理解

在講緩衝區之前,我們要先介紹下記憶體的作用。記憶體是計算機中重要的部件之一,它是與cpu進行溝通的橋梁。計算機中所有程式的執行都是在記憶體中進行的,其作用是用於暫時存放cpu中的運算資料,以及與硬碟等外部儲存器交換的資料。也就是說 只要計算機在執行中,cpu就會把需要運算的資料調到記憶體中進行運算,...

緩衝區的理解

這裡所說的緩衝區指的是為標準輸入與標準輸出設定的緩衝區,為什麼要設定乙個標準輸入緩衝區主要是從效率上來考慮的,如果不設緩衝區會降低cpu的效率,因為它總是會在使用者輸入之後馬上會去執行某些指令,導致多次io開銷!同樣設定乙個標準輸出緩衝區是為了解決列印的問題!總之這樣做的目的就是為了效率!比如如果沒...

Linux 主函式和輸出緩衝區

主函式 int main int argc char ar char envp argc 引數列表中引數的個數,乙個程序啟動時,主函式至少會傳遞乙個引數,ar 0 啟動這個程序的命令 ar 給主函式傳遞的引數列表 envp 傳遞的環境變數 1.什麼是緩衝區?緩衝區是記憶體空間的一部分。也就是說,在記...