堆疊靜態儲存區

2021-10-04 04:01:40 字數 774 閱讀 2741

(1)從靜態儲存區域分配:

內存在程式編譯時就已經分配好,這塊內存在程式的整個執行期間都存在。速度快、不容易出錯,因為有系統會善後。例如全域性變數,static變數等。

靜態變數分為區域性靜態變數和全域性靜態變數,注意區分,區域性靜態變數不是全域性變數

靜態全域性變數的作用域僅限於當前原始檔,靜態區域性變數的作用域僅限於定義的塊語句裡面。但是他們和全域性變數一樣都儲存在全域性區。它們的儲存是靜態的。這句沒錯,靜態變數和外部變數都是全域性變數,這句錯了,定義就不對,外部變數包括靜態全域性變數和全域性變數

補充(c語言):

靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體

所以靜態成員函式不能訪問非靜態的成員。因為靜態成員存在於記憶體,所以非靜態成員函式可以直接訪問類中靜態的成員

(2)在棧上分配:

在執行函式時,函式內區域性變數(如函式體定義的指標)的儲存單元都在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

(3)從堆上分配:

即動態記憶體分配。程式在執行的時候用malloc或new申請任意大小的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活。如果在堆上分配了空間,就有責任**它,否則執行的程式會出現記憶體洩漏,另外頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。

乙個c、c++程式編譯時記憶體分為5大儲存區:堆區、棧區、全域性區、文字常量區、程式**區。

例1:類的例項化:cla *p = new cla,p分配在棧上,p指向的物件分配在堆上。

C 堆 棧 靜態儲存區

棧堆 靜態儲存區 生命週期 函式結束即釋放 new,malloc開闢,delete,free釋放 釋放前,一直存在 最長,程式退出才釋放 儲存型別 程式 區域性變數 new,malloc申請的空間,用於儲存資料 常量static 修飾的變數,用於儲存資料 大小vs2010預設1m vs2010,x3...

堆,棧,靜態儲存區和常量儲存區

在c 中,記憶體分成4個區,他們分別是堆,棧,靜態儲存區和常量儲存區 1 棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的存 儲區.裡面的變數通常是區域性變數,函式引數等.2 堆,又叫自由儲存區,它是在程式執行的過程中動態分配的,它最大的特性就是動.態性.由new分配的記憶體塊,...

c語言儲存區 堆疊靜態儲存區

棧 由編譯器自動分配釋放,其中存放在主調函式中被呼叫函式的下一句 函式引數和區域性變數,容量有限 堆由程式設計師自己分配釋放 用malloc和free,或new和delete 如果我們不手動釋放,那就要到程式結束才釋放。如果對分配的空間在不用的時候不釋放而一味的分配,那麼可能會引起記憶體洩漏,其容量...