C語言程式分割槽

2021-10-14 03:55:39 字數 1148 閱讀 7045

在c語言程式中**在記憶體中進行執行的時候,我們粗略的將程式所占用的記憶體分為棧區、堆區、靜態區、常量區、**區五個區域。每個程式都有唯一五個記憶體區域。

1、棧區

棧區的資料在棧區以棧的形式進行儲存。

棧區的特點:資料先進後出,放在棧區裡面存放的是區域性變數

棧區之中的資料(區域性變數)的作用範圍過了之後,系統就會**自動管理棧區的記憶體(分配記憶體,**記憶體),不需要開發人員來手動管理。

2、堆區

堆區可以高效的使用記憶體,但是如果資料不用時需要及時釋放,否則可能會造成記憶體洩露。(記憶體一直被占用得不到釋放)

這裡的記憶體可以由程式設計師自己手動管理,高效的使用記憶體。例如:申請記憶體、釋放記憶體、優化記憶體arc。

一般常用的申請記憶體的函式有malloc()、realloc()、calloc()這三個函式。釋放記憶體的函式有free()。(在c++編譯器中還有new關鍵字可用於申請記憶體空間,delete關鍵字用於釋放記憶體)

3、靜態區

靜態區存放的是:全域性變數(定義在函式外部的變數,例如在主函式上面定義的變數)和靜態變數

static型別的變數的特點(只初始化一次(初始化是在定義的時候輔助),不初始化的話預設為0)

靜態區記憶體是由系統管理的,一旦靜態區的記憶體被分配,靜態區的記憶體直到程式全部結束後才釋放。

4、常量區

常量區存放:常量(程式在執行的期間不能夠被改變的量 例如:10,『a』,1.12,「ios」,陣列的名字)

常量區的內容通常只能讀的不能被修改的。

5、**區

記憶體還是由系統控制的

**區的存放:程式中的函式編譯後cpu指令當了解c語言中各個記憶體區之間的關係時,我們可以根據定義的是區域性變數,全域性變數,常量還是通過malloc等類似的函式分配記憶體空間,把他們放到對應的記憶體區中。這樣賦予了這些變數或常量不同的生命週期,不同的釋放方式。根據程式的需要。在編碼過程中,宣告不同的變數型別,使他們有不同的宣告長度,不同的釋放方式,給我們更大的靈活程式設計。

c語言語法 c程式的記憶體分割槽

區 text段 資料區 靜態全域性區 bss data 常量區 rodata 堆區 heap 棧區 stack 存放程式二進位制 編譯時已經確定,通常為唯讀儲存區 資料區分為靜態全域性區和常量區 靜態 全域性 區儲存全域性變數和靜態變數,靜態區又可分為 常量區 rodata段 儲存const修飾的全...

C語言記憶體分割槽

計算機的記憶體空間主要分為三個區 系統程式區 應用程式區和資料區 其中資料區又分為系統程式資料區和應用程式資料區兩類。大家在學習過程中編制的 c語言程式就屬於應用程式,程式 本身存放在程式區,而程式執行時所需變數的儲存空間則在應用程式資料區分配,該資料區又分為靜態資料區 堆疊區和堆區三種,程式執行時...

C 程式的記憶體分割槽

乙個程式本質上都是由.bss段 data段 text段三個組成的。data段包含三個部分 heap 堆 stack 棧 和靜態資料區。text段存放 區。bss裡面裝載了未被初始化的資料 如圖 示例如下 int a 0 全域性初始化區 靜態區 char p1 全域性未初始化區 bss段 int ma...