關於堆疊和變數儲存,c語言裡什麼變數儲存在堆中什麼變數儲存在棧中啊!

2022-11-04 21:15:03 字數 3628 閱讀 1000

1樓:

1.c語言中的堆疊是一種資料結構,它表示按照規定強制要求按fifo或filo的方式進行資料讀寫,是軟體層面的意義,你需要定義pop、push的具體操作。

而微控制器中的堆疊是硬體層面的意義,其實現是通過硬體電路實現的,push、pop操作時固定的,你無法改變

2.微控制器分為兩種,哈佛體系和普林斯頓體系,兩者的區別在於乙個是所有物理儲存器沒有不同,是根據器儲存的內容判斷其性質(如80x86系列,code段data段等你自己定義),另乙個是有區分的,**必須存在系統儲存器,臨時資料必須存在資料區(如pic系列),

c語言中的所有概都是軟體層面的,都是對記憶體中的資料,人為的「認為」器具有怎樣的性質。

關於微控制器,推薦你兩本書:《微機原理》和《pic微控制器使用指導》,基本涵蓋了兩大型別的微控制器的基本模型

c語言裡什麼變數儲存在堆中什麼變數儲存在棧中啊!

2樓:寒寒家

來自百科:

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

2、堆區(heap) — 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於連結串列。

3、全域性區(靜態區)(static)— 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後由系統釋放。

4、文字常量區 — 常量字串就是放在這裡的,程式結束後由系統釋放 。

5、程式**區 — 存放函式體的二進位制**。

3樓:匿名使用者

臨時變數都在堆裡,

關於棧。。很複雜,我也是一知半解

區域性變數是存放在棧中,還是存放在堆疊中?

4樓:珈藍利珠

區域性變數是存放在棧中,還是存放在堆疊中?區域性變數存放在棧中。

程式執行中有兩個儲存空間可用,乙個是棧,是歸屬於程序本身的,另外乙個是堆,所有程序共用的。

區域性變數在宣告週期為函式內部,其儲存空間位於棧中。當進入函式時,會對根據區域性變數需求,在棧上申請一段記憶體空間,供區域性變數使用。當區域性變數生命週期結束後,在棧上釋放。

由於程序的棧空間是有限的,所以要避免申請佔用空間過大的區域性變數,以及避免函式巢狀層數過多。這些都可能引起棧空間不夠導致程式崩潰。程式中的區域性變數存放在棧中,因而不能太大,如:

double a[1000][1000];就可能不能通過編譯。使用者動態分配的記憶體,分配於堆中,可以很大。如

double **a = new double *[1000];

for(int i = 0; i < 1000; ++i)

a[i] = new double [1000];

5樓:風若遠去何人留

區域性變數存放在棧中。

程式執行中有兩個儲存空間可用,乙個是棧,是歸屬於程序本身的,另外乙個是堆,所有程序共用的。

區域性變數在宣告週期為函式內部,其儲存空間位於棧中。當進入函式時,會對根據區域性變數需求,在棧上申請一段記憶體空間,供區域性變數使用。當區域性變數生命週期結束後,在棧上釋放。

由於程序的棧空間是有限的,所以要避免申請佔用空間過大的區域性變數,以及避免函式巢狀層數過多。這些都可能引起棧空間不夠導致程式崩潰。

6樓:

程式中的區域性變數存放在棧中,因而不能太大,如:

double a[1000][1000];就可能不能通過編譯。使用者動態分配的記憶體,分配於堆中,可以很大。如

double **a = new double *[1000];

for(int i = 0; i < 1000; ++i)a[i] = new double [1000];

7樓:總有搞不懂問題

問題說詳細,就好回答

8樓:悄逝的天堂

就是區域性變數存放在堆疊裡,全域性變數在記憶體中,

我想問一下你這是關於什麼的程式設計啊?

c語言裡,哪些變數是存放在堆裡,哪些是存放在棧裡?(

9樓:匿名使用者

在c/c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。內容

棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

堆:就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

自由儲存區:就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

全域性儲存區(靜態儲存區):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後有系統釋放。

常量儲存區:這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改。

希望對你有幫助

10樓:匿名使用者

放在堆裡的資料時管理員自己開闢空間和釋放空間,如,new 和malloc,而放在棧裡的資料時計算機自動分配記憶體和釋放的,如變數

棧和堆分別用於存放什麼樣型別的變數?引用和物件又是分別放於哪個中?請詳細解答,謝謝

11樓:

棧記憶體用於存放區域性變數,堆記憶體是在程式執行過程中動態的進行記憶體分配,物件都是放在堆記憶體中,因為它是在程式執行過程中動態建立的,而引用如果是作為區域性變數是放在棧記憶體中的,如果它作為乙個物件的成員變數則它是跟這個物件一起放在堆記憶體中的

j**a靜態全域性變數儲存在堆中的物件中,靜態區域性變數儲存在哪?堆還是棧

12樓:育知同創教育

帶static就是在靜態儲存區,反之不是

當我們例項化乙個類的時候,首先會建立靜態的屬性於靜態儲存區,之後會建立類所屬的屬性,就是你全域性變數於棧中,如果屬性為8種基本資料型別,則棧中存放值,反之,棧中存放指向堆記憶體的位址

堆疊區與一般資料儲存區有何異同?

13樓:紗線

堆疊是存放程式呼叫過程中需要儲存的資料,或者臨時資料,儲存區是儲存長期資料或者永久資料。 堆疊是先進後出形式的。這點要注意!

滿意請採納

在函式中宣告的static變數是儲存在堆疊區域的嗎

14樓:深圳中宇視通科技****

在計算機領域,堆疊是乙個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。 要點: 堆:

順序隨意 棧:先進後出 堆和棧的區別 一、預備知識—程式的記憶體分配 乙個由c/c++編譯的程式佔用的記憶體分為以下幾個部分 ...

怎麼樣把乙個變數定義為堆疊儲存?

15樓:匿名使用者

區域性變數預設儲存在棧中,用new建立的物件儲存在堆中

照你說的就應該是這樣的

int *p=new int;

c語言關於陣列中0和的儲存問題,C語言關於陣列中0和 0 的儲存問題

只能佔用4 個 第五個要留給 0 a 4 0 和 a 4 0 這倆一樣 0 ascii 碼 0 a 4 0 這樣的 0才是ascii碼48 不要被那些人誤導 首先乙個字串的話末尾是必須要有 0的 否則會越界,這樣的後果就是程式會有bug,如果你的陣列有5個空間的話,最後乙個一定要留給 0至於a 4 ...

關於c語言的 變數 位址 和 值

以下是個人理解 變數具有型別,而型別是編譯器用來分配儲存空間的模板,比如int型分配4個位元組,也就是分配了32位。所以,定義乙個變數並不代表分配了乙個空間,只是定義了乙個分配模板。只有使用了已經定義的變數,才為其分配空間,如int i 0 分配空間給所定義的變數和使用變數,兩個的本質是一樣的,並且...

在c語言裡printf怎麼輸出變數

要輸出兩個變數 用逗號隔開即可,d是整數的輸出識別符號,識別符號和變數的順序是相對應的,輸出2個變數的 修改 擴充套件資料 printf 函式是乙個標準函式,它的函式原型在標頭檔案 stdio.h 中,該函式的使用方法如下所示 printf 格式控制字串 輸出變數列表 格式字串的內容和意義如下所示。...