程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中的內存分區引見

C++中的內存分區引見

編輯:關於C++

C++中的內存分區引見。本站提示廣大學習愛好者:(C++中的內存分區引見)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中的內存分區引見正文


C++的內存劃分為棧區、堆區、全局區/靜態區、字符串常量和代碼區。

這裡去失落自在存儲區,增長了代碼區,來由會鄙人面講到。

棧區:由體系停止內存的治理。

解釋:重要寄存函數的參數和部分變量。棧區由體系停止內存治理,在函數完成履行,體系自行釋放棧區內存,不須要用戶治理。全部法式的棧區的年夜小可以在編譯器中由用戶自行設定,默許的棧區年夜小為3M。

全局/靜態區:全局、靜態數據寄存在一路的,初始化的全局變量和靜態變量是在一路的。未初始化的全局變量和靜態變量是在相鄰的空間中。

解釋:全局變量和靜態全局變量的存儲方法是分歧的,然則其差別在於,全局變量在全部源代碼中都可使用,而靜態全局變量只能在以後文件中有用。好比我們的一個法式有5個文件,那末某個文件中請求了靜態全局變量,這個靜態全局變量只能在以後文件中應用,其他四個文件均弗成以應用。而某個文件中請求了全局變量,那末其他四個文件中都可使用該全局變量(只須要經由過程症結字extern聲名一下便可以應用了)。現實上static轉變了變量的感化規模。

字符串常量區:寄存字符串常量,法式停止後,由體系停止釋放。好比我們界說char * p = “Hello World”; 這裡的“Hello World”就是在字符串常量中,終究體系會主動釋放。

代碼區:寄存法式體的二進制代碼。好比我們寫的函數,都是在代碼區的。

堆區:由用戶手動請求,手動釋放。在C中應用malloc,在C++中應用new(固然C++中也能夠應用malloc)。

解釋:new操作符實質上照樣應用了malloc停止內存的請求,是以我將自在存儲區和堆區都說成堆區,不外二者照樣有很年夜的差異。

1)malloc是C說話中的函數,而new是C++中的操作符。

2)malloc請求以後前往的類型是VOID*,而new前往的指針帶有類型。

3)malloc只擔任內存的分派而不會挪用類的結構函數,而new不只會分派內存,並且會主動挪用類的結構函數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved