正確的C++/C堆棧

來源:互聯網
上載者:User

標籤:代碼   記憶體管理   ++   [1]   預設   c/c++   字串   常量   設定   

在理解C/C++記憶體分區時,常會碰到如下術語:資料區,堆,棧,靜態儲存區,靜態區,常量區,常變數區,全域區,字串常量區,靜態常量區,靜態變數區,文字常量區,代碼區等等,初學者被搞得雲裡霧裡。在這裡,嘗試捋清楚以上分區的關係。[1] 資料區包括:堆,棧,全域/靜態儲存區。   全域/靜態儲存區包括:常量區(靜態常量區),全域區(全域變數區)和靜態變數區(靜態區)。   常量區包括:字串常量區和常變數區。   代碼區:存放程式編譯後的二進位代碼,不可定址區。 可以說,C/C++記憶體分區其實只有兩個,即代碼區和資料區。 一、真正合理的C++的記憶體劃分為棧區、堆區、全域區/靜態區和代碼區。 這裡去掉自由儲存區,增加了代碼區,理由會在下面講到。 棧區:由系統進行記憶體的管理。 說明:主要存放函數的參數以及局部變數。棧區由系統進行記憶體管理,在函數完成執行,系統自行釋放棧區記憶體,不需要使用者管理。整個程式的棧區的大小可以在編譯器中由使用者自行設定,預設的棧區大小為3M。 堆區:由使用者手動申請,手動釋放。在C中使用malloc,在C++中使用new(當然C++中也可以使用malloc)。 全域/靜態區:全域、待用資料存放在一起的,初始化的全域變數和靜態變數是在一起的。未初始化的全域變數和靜態變數是在相鄰的空間中。這裡包括常量區。 代碼區:存放程式體的二進位代碼。比如我們寫的函數,都是在代碼區的。

正確的C++/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.