回覆列表
  • 1 # C語言答疑課堂

    我們在使用C語言編寫程式時,時常會面對“緩衝區”這個概念,那麼什麼是緩衝區?有緩衝區是什麼意思?沒有緩衝區又是什麼意思呢?講明白之後再留一個問題供思考。

    一、C語言程式設計中緩衝區的概念

    緩衝區是記憶體中的一塊儲存區域,這塊儲存區域用來存放你輸入的資料,或者用來存放從檔案中讀入的資料。

    比如,使用C語言的scanf函式讀取資料,直觀上我們覺得它是從鍵盤上讀取資料的,其實不然。從鍵盤上輸入一個C語言的字串,這字串先是放在緩衝區中,然後函式scanf再從從緩衝區讀取這個字串。

    再比如,使用C語言的getchar函式從文字檔案中讀取資料,也是先把文字檔案中的一個個字元先放入緩衝區,然後getchar函式再從緩衝區中讀入這些字元。

    緩衝區是C語言程式設計的IO函式庫中很多函式要涉及的一個概念。

    二、系統有緩衝區是什麼意思?

    一個系統有緩衝區,意味著你的C程式執行時系統會為C程式分配一塊儲存區域用作緩衝區。那麼你從鍵盤輸入的資料就可以先放在這個緩衝區裡,這樣做的一個非常大的好處就是當你發現你輸入錯誤了,你還可以修改緩衝區的資料。最典型的例子就是你在文字檔案裡輸入C語言字串“abcd”,此時這個字串放在緩衝區,你發現輸入錯了你可以修改為“1234”,最後點選儲存清空緩衝區。

    三、系統沒有緩衝區是什麼意思?

    系統不會給每一個C程式都分配一個緩衝區,因為有的C程式確實不需要緩衝區,這種C程式往往需要實時的互動性,比如遊戲。你用C語言寫了一個貪吃蛇的遊戲,當你按下“左”鍵時,貪吃蛇必須立即向左走,這個時候“左”這個資料就不能先放在緩衝區了,否則放在緩衝區那麼貪吃蛇不會立即向左走,而是要等到系統情況緩衝區後你的C程式才能讀取這個“左”的命令,然後貪吃蛇才能響應。

    四、如何使用C程式程式碼判斷系統是否有緩衝區?

    我們在寫程式之前先要知道自己的系統是否支援緩衝區,可以自己動手編寫一個C程式程式碼來判斷,該如何寫呢?這裡留一個疑問供大家思考。思路是可以使用C語言IO函式的getchar函式和putchar函式。

  • 2 # 光明右使8787

    緩衝區是用來解決慢速裝置和快速裝置之間的效率差異的。比如socket程式設計,send函式並不是把報文送給網絡卡傳送,而是插入傳送佇列等待網絡卡傳送,網絡卡每隔一段時間就從佇列中取出報文傳送出去。為什麼要這樣設計?是因為業務邏輯處理速度遠高於網絡卡傳送速度,如果實時呼叫網絡卡進行傳送,應用程式就會等網絡卡處理後的返回結果,程度會掛起,浪費CPU資源。同一時刻可能有多個程序在發包,如果實時調網絡卡就會有併發衝突。用非同步佇列快取資料就能完美解決這兩個問題。

  • 中秋節和大豐收的關聯?
  • MISS“連斬流”上單派克,23殺血洗峽谷,核心裝備是這件“3500”神器,你有何看法?