關於C 中的堆 棧

2022-08-13 01:09:14 字數 686 閱讀 6680

乙個c++程式設計占用的記憶體分為以下幾個部分:

(1)棧區 ( stack ):由編譯器自動分配、釋放,存放函式的引數值,區域性變數值。操作方式類似資料結構中的stack。

(2)堆區 ( heap ):一般由程式設計師分配、釋放。如果程式設計師未釋放,一般由os在程式結束時**。同資料結構中的堆不同,分配方式類似鍊錶。

(3)靜態區 ( static ):全域性變數和靜態變數儲存在一起。 程式結束後系統自動釋放。

(4)文字常量區:常量字串存放區。程式結束後系統自動釋放。

(5)程式**區:存放程式函式binary codes。

由前輩寫的幫助理解的程式如下:

int a = 0 ; // 全域性初始化區

char *p1; // 全域性未初始化區

int main()

int b ; // 棧

char s = "abc"; // 棧

char *p2;  // 棧

char *p3 = "123456";  //123456在常量區,p3在棧

static int c = 0 ;  //全域性初始化區

p1 = (char*)malloc(10);  //堆

p2 = (char*)malloc(20);  //堆

strcpy(p1,"123456");  //123456在常量區

return 0;

C 程式中關於堆疊程式的簡單理解

include stack.h stack stack create an empty stack bool stack isempty const bool stack isfull const bool stack push const item item else return false b...

C 中堆,棧,佇列

c c 記憶體分為五個部分 1 棧區 stack 存放函式的引數值,區域性變數的值等 編譯器自動分配釋放 2 堆區 heap 注意 與資料結構中的堆完全不同,分配方式類似於鍊錶 程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 3 全域性區 靜態區 全域性變數和靜態變數儲存在一塊,初始化...

程式中關於堆疊大小的劃定

昨天在做 小豬登山 的題目碰到了陣列容量太大的問題,今天做乙個總結。首先,參考了slyar的文章 c語言 全域性變數和區域性變數的大小限制 直接貼上。include int main 編譯執行後發現溢位錯誤。include int a 1000000 全域性變數 int main 編譯執行後正常。在...