導航:首頁 > 源碼編譯 > 編譯代碼放在內存嗎

編譯代碼放在內存嗎

發布時間:2022-07-26 08:29:46

『壹』 程序運行時,程序代碼是在堆中還是在棧中還是在內存中

在內存中。
樓上說的沒錯,一般計算機的內存分為好幾個區域,每個區域都有自己的特殊的作用。堆棧是用來暫時存放數據和地址的。通常用來保護斷點和現場。在單片機中,發生中斷的時候cpu會執行中斷服務程序。然而在cpu執行中斷服務程序之前會先把斷點地址推入堆棧,把現場的數據也推入堆棧。當執行完中斷服務程序的時候,可以找到斷點的地址,然後繼續執行主程序。比如說我們使用計算機的時候,讓計算機睡眠的時候也是先把cpu正在執行的程序壓入堆棧保存起來。喚醒的時候可以很快的啟動並繼續執行睡眠前的服務。防止丟失數據。

『貳』 代碼 佔用內存

1.代碼長會多佔內存,但是不會佔多少,可以忽略
2。多餘函數不佔內存,因為它根本沒有被編譯器編譯,也就是說二進制文件裡面根本沒有這個函數的代碼,在運行的時候顯然不可能將不存在的東西調入代碼段。
3.減小內存主要靠控制數據結構,好的數據結構和演算法是根本之道

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

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

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

第一是將java文件編譯成位元組碼文件 就是class文件 給jvm執行
第二就是分配常量池 就是給你代碼裡面的變數和方法分配空間

『伍』 編譯時分配內存和運行時分配內存

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

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

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

『陸』 一個程序編譯完成後在內存中是如何存儲的


如上所說,內存被分成 程序代碼區、堆區、棧區 還有個全局數據區

1.程序代碼區:存放你的全部代碼

2.堆區:存放用new 申請的變數(如 int a = new int(5))

3.棧區;存放int = 5;之類的變數(必須放在函數中)

4.全局數據區:存放全局或靜態變數,即定義在函數外的,或加上static的變數
(如:static int a = 5;)

『柒』 我們的代碼要執行,必須先把代碼放進內存里嗎

是這樣的,電腦開機以後,會先執行基本輸入輸出系統的初始化程序。以前學計算機都會聽說什麼rom啥的,rom裡面就是固化這些基本的東西。開機以後由硬體控制,裡面的東西都復制到內存(ram)中,然後還是由硬體控制,從一個固定內存地址開始執行代碼。
這些代碼中有一個功能就是從磁碟的指定位置讀取一段程序到內存中,然後執行這段程序,

然後慢慢地就載入系統內核,載入系統,啟動程序,啥啥啥

循環是有個頭的,這個頭就是靠硬體電路實現把代碼從rom弄到ram然後cpu從ram指定地址開始執行代碼

『捌』 C語言基礎問題:我們程序里定義的字元串常量都是編譯後是在內存里分配還是存儲在代碼區

是的。只不過初始化char數組的放在棧上,初始化char*的放在rsrc區段(可以拿peid查看)。

『玖』 java程序是在編譯的時候分配空間的嗎,如果不是那程序在什麼時候給變數分配內存空間

編譯的時候是不會分配空間的,只是將java代碼編譯成位元組碼。是在運行這段代碼的時候才會分配。javac XX.java是編譯代碼,java XX時候是運行代碼。舉個簡單的例子:
class Cs{
int a=1;
public void print(){
System.out.print("a="+a);
}
public static void main(String args[]){
Cs c=new Cs();
c.print();
}}
當你執行到Cs c=new Cs();的時候會初始化變數。將引用變數c放入棧內存,將變數a=1放入堆內存。

『拾』 關於編譯過程中分配內存的問題

好吧,問題沒看清楚.
他所謂的編譯時候分配的內存,其實就是你exe運行前的准備工作.
這些東西操作系統也能幫你做到.
你那書是把編譯和調試歸為一體了,所以對於他來說,編譯就會運行程序...
編譯只是為了生成exe文件,而exe文件是放在硬碟上的.
所以,你重啟之後exe還在,運行exe之後,才分配內存

閱讀全文

與編譯代碼放在內存嗎相關的資料

熱點內容
當一個體面的程序員是什麼體驗 瀏覽:291
聯想安裝哪個編譯器 瀏覽:446
蘋果手機如何創建app組 瀏覽:40
如何知道伺服器開通了什麼埠 瀏覽:34
動態ip地址由dhcp伺服器來分配 瀏覽:800
aes128加密c 瀏覽:396
成為插畫師pdf 瀏覽:325
奧特曼系列ol為什麼進不去伺服器 瀏覽:742
盛世伺服器怎麼開啟 瀏覽:87
編譯安卓源碼修改定位 瀏覽:200
加密上市是什麼意思 瀏覽:802
一年程序員面試 瀏覽:174
多個jpg合成pdf 瀏覽:929
pdf轉word是圖片 瀏覽:941
程序員看不懂怎麼辦 瀏覽:273
linux操作系統題 瀏覽:767
單片機無符號數加法 瀏覽:229
應用隱藏加密怎麼關閉 瀏覽:269
汽車空調的壓縮機電線有什麼用 瀏覽:431
電腦加密圖片如何取消加密 瀏覽:343