當前位置:首頁 » 編程軟體 » 編譯時分配內存

編譯時分配內存

發布時間: 2025-01-14 23:35:19

① 請問運行時分配內存和編譯時分配內存有什麼區別

一。運行時分配內存
既然是運行時分配內存,首先這個一定是動態的內存。。那麼它的作用是什麼呢,它的主要應用場所就是在
事先並不知道要多少內存來存儲我們想要存的東西,比如說
偶們現在想要用內存來保存中國深圳的人口相關信息,但是這個城市有多少人呢,這個數字是不確定的隨時都是在變的,這個時候就不可能定義一個固定大小的數組來保存了,這樣就需要動態內存了,來一個就加一個,少一個就減一個多好用,是不。。嘿嘿
二。編譯時候分配的內存。。當然就是事先偶知道要多大的內存。所以就先申請固定大小的內存嘍。這個就是在編譯時候就會分配內存
三。動態的內存一經申請,只要沒有人為的釋放掉它,那麼它會一直存在,直到程序運行結束,才會被釋放。
四。。動態內存會在進程結束的時候自動釋放的。。嘿嘿。。進程都沒有了,那麼內存何在
是不。。瓶子破了,水當然會溜走,想留下也不行啊
回復libujuan

② 編譯器在編譯的時候做了什麼給申明的變數分配內存

編譯器在編譯的時候是不會聲明變數和分配內存的。 分配內存之類的是在運行時執行的。

一般編譯器在編譯的時候,只是做代碼的格式檢查, 然後將代碼轉換成機器碼或中間代碼。

③ 編譯時分配內存和運行時分配內存

編譯其實只是一個掃描過程,進行詞法語法檢查,代碼優化而已,編譯程序越好,程序運行的時候越高效。
我想你說的「編譯時分配內存」是指「編譯時賦初值」,它只是形成一個文本,檢查無錯誤,並沒有分配內存空間。

當你運行時,系統才把程序導入內存。一個進程(即運行中的程序)在主要包括以下五個分區:
棧、堆、bss、data、code

代碼(編譯後的二進制代碼)放在code區,代碼中生成的各種變數、常量按不同類型分別存放在其它四個區。系統依照代碼順序執行,然後依照代碼方案改變或調用數據,這就是一個程序的運行過程。

④ 問一個較為老的問題,C++程序運行時內存分為幾個區域

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

1、棧區(stack)— 程序運行時由編譯器自動分配,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。程序結束時由編譯器自動釋放。

2、堆區(heap) — 在內存開辟另一塊存儲區域。一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。

3、全局區(靜態區)(static)—編譯器編譯時即分配內存。全局變數和靜態變數的存儲是放在一塊的,初始化的 全局變數和靜態變數在一塊區域, 未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。 - 程序結束後由系統釋放

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

5、程序代碼區—存放函數體的二進制代碼。

⑤ 內存的分配方式有幾種

內存分配方式有三種:
[1]從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變數,static變數。
[2]在棧上創建。在執行函數時,函數內局部變數的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,效率很高,但是分配的內存容量有限。
[3]從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc或new申請任意多少的內存,程序員自己負責在何時用free或delete釋放內存。動態內存的生存期由程序員決定,使用非常靈活,但如果在堆上分配了空間,就有責任回收它,否則運行的程序會出現內存泄漏,頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。

熱點內容
java流程式控制制 發布:2025-01-15 09:33:32 瀏覽:301
訊飛語音源碼 發布:2025-01-15 09:26:04 瀏覽:791
什麼車配置好開 發布:2025-01-15 09:24:37 瀏覽:816
編譯程序用cpu嗎 發布:2025-01-15 09:24:24 瀏覽:440
ftp4j下載 發布:2025-01-15 09:01:44 瀏覽:784
手機wifi密碼在哪裡看 發布:2025-01-15 08:59:16 瀏覽:112
自從編程s 發布:2025-01-15 08:46:41 瀏覽:832
android獲取許可權 發布:2025-01-15 08:45:15 瀏覽:963
採用請求分頁存儲 發布:2025-01-15 08:45:04 瀏覽:249
pfu資料庫 發布:2025-01-15 08:40:49 瀏覽:1002