【轉】嵌入式C語言那點事(一)幾個重要關鍵字

來源:互聯網
上載者:User

標籤:

原文連結:http://blog.csdn.net/pirateleo/article/details/7529776

一、static

關鍵字static,修飾變數時:

1、限制該變數的範圍:比如靜態全域變數,只能在該模組中使用(本c檔案中)。

2、決定該變數的儲存位置:修飾為靜態變數,儲存在待用資料區(非堆棧內)。(同比,全域變數也都存放在待用資料區中。)

帶初值和不帶初值的靜態變數:(以TI DSP 54XX為例)

a.不帶初值的靜態變數,儲存在.bss段中。

b.帶初值的靜態變數,儲存在.bss段中,但其初值儲存在.init中。在DSP Booter完成載入初始化後已經將init段的值賦值到.bss對應變數中。

關鍵字static,修飾函數時:限制該函數的範圍,僅能在本模組中使用(本c檔案中)。

結論:static關鍵字對於使用者而言,最重要的是對變數或函數範圍的限制。

 

二、const

關鍵字const意味著“不變的”:

1、什麼時候該用:定義一個函數時如果在輸入參數前加上const,可以防止該輸入變數被改寫而引出的錯誤;函數定義時使用const可以起到函數API自注釋作用;

2、怎麼用:

以下摘錄經典面試題中的例子:

const int a; 
int const a; 
const int *a; 
int * const a; 
int const * a const; 

前兩個的作用是一樣,a是一個常整型數。

第三個意味著a是一個指向常整型數的指標(也就是,整型數是不可修改的,但指標可以)。

第四個意思a是一個指向整型數的常指標(也就是說,指標指向的整型數是可以修改的,但指標是不可修改的)。

最後一個意味著a是一個指向常整型數的常指標(也就是說,指標指向的整型數是不可修改的,同時指標也是不可修改的)。

 

三、volatile

關鍵字volatile意味著“易改變的”:

修飾為volatile的變數,編譯器不會對其進行任何最佳化,每次求值時會到指定地址(物理或映射)去讀取。因此適用於“平行裝置的硬體寄存器(如:狀態寄存器) ;一個中斷服務子程式中會訪問到的非自動變數(Non-automatic variables) ;多線程應用中被幾個任務共用的變數 ”,我個人只用到在IO和中斷中,至於多線程的問題有個文章可供參考。

http://www.soft-bin.com/html/2010/07/30/concurrent-multithread-code-problem-and-volatile-and-atomic-opration.html

 

四、堆與棧(heap and stack)

1) 堆是由使用者維護的。比如我們malloc一段空間,此時開闢的空間便在堆中,調用free時再釋放。過於頻繁的malloc與free會導致堆中產生片段(一個空間的地址不連續),影響讀寫速度。

2) 棧是由編譯器控制的,我們無需幹涉。比如我們定義的局部變數或是調用了一個函數。以函數調用為例,此時系統會將現場資料(主要是部分寄存器中的資料,如PC的儲存可以在調用結束時程式迴歸此處繼續運行)壓入棧內,將寄存器空出迎接被調函數中的一系列計算和控制。被調函數執行完後再進行出棧操作,流程繼續。

【轉】嵌入式C語言那點事(一)幾個重要關鍵字

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.