導航:首頁 > 源碼編譯 > c編譯後的內存

c編譯後的內存

發布時間:2022-07-23 23:34:01

㈠ c語言內存問題

答案是C
p1是存儲在棧區
p2這個指針是存儲在堆區的,因為p2是malloc分配的空間
"123456"是一個常量,所以它是存儲在常量區的,並不是存儲在棧區
棧區和堆區方向是相反的,一個向下增長,一個向上遞減。

㈡ C或C++程序編譯時內存分為幾個存儲區

1、從操作系統原理的角度來看,只有一個存儲區就是虛擬內存。
2、根據功能可以分為 ,棧區 、堆區、靜態區, 棧區一般指的一個函數局部變數,在編譯原理中這叫做一個棧幀。 堆區一般是為了用戶自由分配的,一般C語言中用MALLOC函數分配,C++中用NEW運算符來分配,它是有操作系統的堆管理器來管理的,拿windows來說,在一個程序運行後,一般至少有兩個默認的堆,一個是new堆,一個進程 自己的堆, 靜態區,這個一般是全局變數或者static變數使用的區域,這個區域,如果你對PE結構熟悉,就會明白這實際上是pe 區段中的.data區段,當程序運行後變成進程,這個區段是直接內存文件映射過去的。

㈢ c語言哪些占程序空間哪些占內存空間

一個由C/C++編譯的程序佔用的內存分別為以下四個部分:

  1. 程序代碼區:存放程序的二進制代碼。

  2. 靜態數據區:存放程序運行期間用到的數據。其存儲空間是在編譯時分配的,在整個程序執行期間靜態數據區中的數據一直存在,程序結束後由系統釋放。

  3. 動態內存區(也稱棧):也存放程序運行期間用到的數據,其存儲空間在程序運行期間由編譯器自動分配釋放,其生命周期短於程序的運行期。

  4. 堆區:由程序員分配釋放,若程序員不釋放,程序結束時可能由系統回收。

以上內容抄自課本《C語言與程序設計》(電子工業出版社)

㈣ 在c語言中 佔用的內存

在c語言中指針是一個unsigned
類型的無符號數,其所佔內存位元組一般是和計算機的cpu字長是一致的,拿32位計算機來說,指針所佔的內存空間一般為4個位元組,不管char
*還是int
*抑或是float
*,都是4個位元組。
程序員可以使用sizeof運算符獲取數據類型或者某個變數的內存所佔位元組數。比如
printf("%d\t%d\t%d\n", sizeof(char *), sizeof(int *), sizeof(float *));

㈤ C語言編譯成功的代碼顯示的內存數是什麼單位的

兄弟你還沒有寫明調用哪個函數和調用的參數!

㈥ C或C++程序編譯時內存分為哪5個存儲區呢

我想很多人也是糊塗,以下文章寫得很好,故全文轉來,慢慢體會。 程序的內存分配(堆和棧區別) 一、預備知識 程序的內存分配 一個由c/C++編譯的程序佔用的內存分為以下幾個部分 1、棧區(stack) 由編譯器自動分配釋放 ,存放函數的參數值,局...

㈦ C語言運行的內存要求是哪三個是不是程序代碼區,靜態存儲區和動態存儲區。求高人路過

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

㈧ c語言內存有幾種分配方式

基本上C程序的元素存儲在內存的時候有3種分配策略:
靜態分配
如果一個變數聲明為全局變數或者是函數的靜態變數,這個變數的存儲將使用靜態分配方式。靜態分配的內存一般會被編譯器放在數據段或代碼段來存儲,具體取決於實現。這樣做的前提是,在編譯時就必須確定變數的大小。 以IA32的x86平台及gcc編譯器為例,全局及靜態變數放在數據段的低端;全局及靜態常量放在代碼段的高端
自動分配
函數的自動局部變數應該隨著函數的返回會自動釋放(失效),這個要求在一般的體系中都是利用棧(Stack)來滿足的。相比於靜態分配,這時候,就不必絕對要求這個變數在編譯時就必須確定變數的大小,運行時才決定也不遲,但是C89仍然要求在編譯時就要確定,而C99放鬆了這個限制。但無論是C89還是C99,都不允許一個已經分配的自動變數運行時改變大小。
所以說C函數永遠不應該返回一個局部變數的地址。
要指出的是,自動分配也屬於動態分配,甚至可以用alloca函數來像分配堆(Heap)一樣進行分配,而且釋放是自動的。
動態分配
還有一種更加特殊的情況,變數的大小在運行時有可能改變,或者雖然單個變數大小不變,變數的數目卻有很大彈性,不能靜態分配或者自動分配,這時候可以使用堆(Heap)來滿足要求。ANSI C定義的堆操作函數是malloc、calloc、realloc和free。
使用堆(Heap)內存將帶來額外的開銷和風險。

閱讀全文

與c編譯後的內存相關的資料

熱點內容
哈夫曼編碼數據壓縮 瀏覽:414
鎖定伺服器是什麼意思 瀏覽:375
場景檢測演算法 瀏覽:607
解壓手機軟體觸屏 瀏覽:338
方舟pv怎麼轉伺服器 瀏覽:99
數據挖掘中誤差值演算法函數 瀏覽:118
php開發套件 瀏覽:190
伺服器的spi板是什麼 瀏覽:896
解壓縮全能王中文密碼是什麼 瀏覽:80
javaftp伺服器上傳文件 瀏覽:103
演算法設計中文版pdf 瀏覽:81
視頻壓縮形式怎麼改 瀏覽:368
perl程序員 瀏覽:789
電子表格對比命令 瀏覽:610
php循環輸出數組內容 瀏覽:750
電腦加密能不能強制關掉 瀏覽:616
趣味單人解壓桌游 瀏覽:212
oppo手機谷歌伺服器無法核實什麼 瀏覽:320
軟體怎麼加密華為 瀏覽:222
掃地機怎麼安裝app 瀏覽:319