當前位置:首頁 » 編程語言 » c語言的三個區
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言的三個區

發布時間: 2022-05-12 08:08:19

1. 什麼是代碼區,全局數據區,堆區,棧區我只懂c語言基礎,請說得通俗詳細一點,,大謝。。

我感覺你還是不要只記概念,這些東西在你以後的學習過程中都會遇到的,比如在學數據結構時就會遇到堆區和棧區,到時候再去掌握也不遲。
不過簡單說說吧(因為我也不太懂):
代碼區:就是存放你的程序的編譯後的可執行代碼的地方了
數據區:存放你的程序靜態數據,如全局變數、常量等。
棧:在函數調用中,保存程序的當前運行狀態、函數的參數、返回結果等。
堆:在分配給一個程序的內存中,除了上面三部分,剩下的就是堆了,也就是程序的自由空間,局部變數(自動變數)等,還有New給指針用的空間,都在這里分配。

在內存空間的順序是代碼區,數據區,堆,棧

2. c語言數組在內存中是怎麼分配的

C語言中內存為分三類:棧區、堆區、靜態數據區。

局部變數在棧上分配,函數調用前的棧指針,要和函數返回後的棧指針一樣,否則就會出錯。

void test(void)

{

char i,a[10];

printf("0x%x", &i);

printf("0x%x", a);

printf("0x%x", a+1);

printf("0x%x", a+2);

printf("0x%x", a+3);

}

(2)c語言的三個區擴展閱讀

c語言數組在內存分配

示例:

#include<stdio.h>

int main()

{

int a[4] = {11,12,13,14};

int b[4] = {21,22,23,24};

int *pa = &a;

int i = 0;

while(i<8)

{

i++;

printf("now *p value = %d and",*pa);

printf("p addr value = %d ",pa);

pa++;

}

return 0;

}

3. c語言程序的三大區域

不太清楚。

4. C語言程序的三大區域從上到下分別是

C語言程序的三大區域從上到下分別是:依賴庫 程序過程 主函數
希望可以幫到你,謝謝!

5. C語言:內存分哪幾個區各有什麼用

32位操作系統中有4G的虛擬內存,1、os區為系統所佔內存 2、棧區auto區的內存是自動分配的,不需要malloc申請 3、堆區需要自己申請所要用的內存,在用的同時,用完之後要用free釋放,防止內存泄漏 4、靜態區分中有BSS區.文本區.常量區

6. C語言中有無堆的概念

棧,堆,靜態區,是內存開辟的三個專屬區,C語言的內存分配也就只有這三種方式

1.內存在棧上創建(棧結構)
如函數里定義的變數int i; char str[80],還有保存函數的所有信息的內存都是在棧上創建的
這塊內存是連續的,就好比是一個數組,所以你在內存分配的時候,會發現變數地址是連續的

2.內存在堆上創建(鏈表結構)
這塊內存是有很多內存塊組成,很像鞭炮一樣串在一根繩子上,但這些內存塊的大小不一樣,存儲在鏈表結構中的結點中,當你用malloc動態申請是,編譯器會根據你內存塊的大小從表頭一次檢索,直到鏈表中的內存塊大於等於你所申請的內存大小時,返回該快內存,如果鏈表上的內存塊大於你所申請的內存時,會將多餘內存回收到鏈表結構,這也就是為什麼動態申請內存容易造成內存碎片的產生原因。所以分配內存時你會發現他們的地址不連續

3內存在靜態區創建
如全局變數,static變數
這塊內存也是連續的,也像一個數組,但它跟棧上創建內存唯一的區別是,內存作用時間不一樣,靜區內存作用時間是整個「程序」運行時間,棧上內存作用時間是整個「函數」的運行時間,注意「程序」和「函數」的區別

而堆內存作用時間范圍是0到整個「程序」運行時間,如果你要在小於整個「程序」運行時間內釋放這塊內存的話,就要使用free,所以是手動申請手動釋放,你自己可以控制,但是寫代碼的好習慣習慣是程序中有幾個malloc就有幾個free,這樣可以防止內存泄露

代碼段指的是代碼段寄存器,你寫的代碼存放在這個寄存器里,等待CPU調用,這個屬於微機原理所討論問題,有興趣可以學學

7. C語言,函數是存儲在代碼區,想問代碼區是棧區嗎

代碼區是獨立的一個區,不屬於棧區
1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其
操作方式類似於數據結構中的棧。
2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回
收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。
3、全局區(靜態區)(static)—,全局變數和靜態變數的存儲是放在一塊的,初始化的
全局變數和靜態變數在一塊區域, 未初始化的全局變數和未初始化的靜態變數在相鄰的另
一塊區域。 - 程序結束後由系統釋放。
4、文字常量區 —常量字元串就是放在這里的。 程序結束後由系統釋放
5、程序代碼區—存放函數體的二進制代碼。

8. C語言的三大區域是什麼

1、循環,函數,指針。
2、C語言其他重要規則:
(1)C源程序是由一個主函數和若干個其它函數組成的。
(2)函數名後必須有小括弧,函數體放在大括弧內。
(3)C程序必須用小寫字母書寫。
(4)每句的末尾加分號。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加註釋。
一個完整的C語言程序,是由一個main()函數(又稱主函數)和若干個其它函數結合而成的,或僅由一個main()函數構成。

9. c語言堆和棧,靜態區的理解

樓主問這樣的問題,需要澄清平台。比如windows下的與linux下的編譯器及很多嵌入式C編譯器不同。為什麼考慮嵌入式C?原因是目前C語言的很大市場在嵌入式領域。windows下,除了某些特殊需要,java,C++,C#已經優勢盡顯了。

另外,討論了半天,q在你代碼的那裡?我怎麼沒找到??我眼睛都揉紅了也沒找見呀
只好表述一下原理
VC下:
1. 函數形參和函數內部非靜態局部變數都在棧上分配(所以a,b,p本身都在棧上。但p指向的內容在堆上。q在哪裡,我找不到)。
棧的分配的方法是:sp-=字數。
sp是堆棧指針。」字數「是說:你分配一個位元組的局部變數,編譯器也給你一個字的長度的空間。原因是,堆棧是具有字長度的。16位、32位機器下,字長度為16,64位機器下,字長度為32.
而且,windows下,棧是從高地址向低地址增長的。為什麼?棧與堆共享空間,並且,堆從低向高長,棧從高向低長,降低溢出風險。

靜態區名字本身就說明了他的特性:靜止的,不隨程序的運行變化。也就是相對的說,堆和棧都是動態的。靜態區是編譯器在編譯時指定長度、鏈接時定位地址、windows載入器載入時分配內存。
這里的動與靜是編譯器和鏈接器的說法,是語言層面。不適用於系統層面。Windows隨時可能將任何用戶程序程序的全部資源「請出」內存,也可重新載入,此時,什麼靜都是浮雲。

還有返回值。樓主的main不返回值編譯器會警告你的。返回值存在什麼地方?
答案是寄存器里AX(EAX,DX,EDX等)。

嵌入式系統里可能這些都不適用。比如,某些嵌入式處理器的形參直接使用寄存器(R0~R15,或A、B等)

10. C語言和C++的區別

C語言與C++的區別有很多,下面是簡要概述:

1、面向不同

C語言是面向過程的,

C++是面向對象的。

函數庫

C語言有標準的函數庫,它們鬆散的,只是把功能相同的函數放在一個頭文件中;

C++對於大多數的函數都是有集成的很緊密,特別是C語言中沒有的C++中的API是對Window系統的大多數API有機的組合,是一個集體。但你也可能單獨調用API。

3、結構概念不同

C言中結構只有成員變數,而沒成員方法,C語而在但是在C語言中結構的成員是公共的,什麼想訪問它的都可以訪問;

C++中結構中,它可以有自己的成員變數和成員函數。

4、寫作數量不同

C語言可以寫很多方面的程序,

C++可以寫得更多更好,C++可以寫基於DOS的程序,寫DLL,寫控制項,寫系統。

5、組織不同

C語言對程序的文件的組織是鬆散的,幾乎是全要程序處理;

C++對文件的組織是以工程,各文件分類明確。