C++學習隨筆之六:記憶體管理和命名空間

來源:互聯網
上載者:User

1.單獨編譯:跟C語言一樣,C++也允許甚至鼓勵程式員將組件函數放在獨立的檔案中。

2.程式結構:包括三部分:    標頭檔:包含結構聲明和使用這些結構的函數的聲明    原始碼檔案:包含與結構有關的函數的代碼    原始碼檔案:包含調用與結構相關的函數的代碼  標頭檔常包含的內容如下:    (1)函數原型    (2)使用#define或const定義的符號常量    (3)結構聲明    (4)類聲明    (5)模板聲明    (6)內聯聲明

3.include標頭檔 角括弧和雙引號的區別:採用角括弧,則C++編譯器將在儲存標準標頭檔主機系統的檔案系統中尋找;如果採用雙引號,則編譯器將首先尋找當前工作目錄或原始碼目錄(或其他目錄,這取決於編譯器),若沒有在那裡找到標頭檔,則再在標準位置尋找。3.儲存持久性、範圍和連結性:    自動儲存持久性:在函數定義中聲明的變數(包括函數參數)的儲存持久性為自動的。他們在程式開始執行其所屬的函數或代碼塊時被建立,在執行完函數    
    或代碼塊時,他們使用的記憶體被自動釋放。
    靜態儲存持久性:在函數定義外定義的變數或是用static定義的變數的儲存持久性都為靜態。它們在整個程式運行中都存在。
    動態儲存裝置持久性:用new操作符分配的記憶體將一直存在,直到用delete將其釋放或者程式結束為止。這種記憶體的儲存持久性為動態。又稱為自由儲存。
    範圍:描述檔案在多大範圍內可見。
    連結性:描述了名稱如何在不同記憶體間共用。連結性為外部的名稱可在檔案間共用,連結性為內部的名稱只能由一個檔案中的函數共用。自動變數的名稱沒
    有連結性,因為它們不能共用。
    寄存器變數:用register聲明的局部變數.寄存器變數儲存在cpu寄存器中,所以不能用取址操作符&對其進行取址操作。當然也是沒有連結性的(因為沒有    
    (使用記憶體)。    靜態持續變數:初始化時,如果沒有顯示的對其初始化,則編譯器把它設定為0。
    (1)要想建立連結性為外部的靜態持續變數,必須在代碼塊外面聲明它
    (2)要想建立連結性為內部的靜態持續變數,必須在在代碼塊外面聲明它,並使用static限定符
    (3)要想建立沒有連結性的靜態持續變數,必須在代碼塊內聲明它,並使用static限定符
    程式碼範例:
     ...
    int global = 100;            //static duration ,external linkage
    static onefile = 50;        //static duration,internal linkage
    int main()
    {
        ...
        ...
    }    void func(int n)
    {        static int count =0;    //static duration,no linkage        int limit=0;        ...
    }


    所有的靜態持續變數都有以下兩個初始化特徵:
    (1)未初始化的變數的所有位都設定為0
    (2)只能使用常量運算式來初始化靜態變數
   5種變數儲存方式表格如下:
    


4.說明符和限定符:    儲存說明符(storage class specifier):包括:auto、register、static、extern和mutable。
    mutable關鍵字表明,即使結構或類變數為const,其某個成員也可以被修改。例如:
    struct data
    {        char name[30];        mutable int accesses;        ...
    }    const data veep = {"caizhiming",0,...};
    strcpy(veep.name,"caizhiming2");//not allowed,這個是不允許的
    veep.accesses++; // allowed,這個是運行被修改的。
    cv-限定符(const-qualifier):包括:const和volatile
    volatile關鍵字表明,即使程式碼沒有對記憶體單元進行修改,其值也可能發生變化,即表示該變數是易變的。
5.布局new操作符:它讓你指定要使用的位置。程式員可能使用這種特性來其記憶體管理規程或處理需要通過特定地址進行訪問的硬體。    要使用new布局特性,首先需要包含標頭檔new,它提供這種版本的new操作符的原型;然後將new操作符用於提供所需地址的參數。除需地址指定參數
    外,句法與常規new操作符相同。
    程式碼範例:
    #include<new>
    struct chaff
    {        char dross[20];        int slag;
    };    char buffer1[50];
    char buffer2[500];
    int main()
    {        chaf *p1,*p2;        int *p3,*p4;        //常規new操作符        p1=new chaff;        p3=new int[20];        //布局new操作符        p2=new (buffer1)chaff;        p3=new (buffer2) int[20];
    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.