Ⅰ 計算機正在運行的程序存放在
計算機正在運行的程序一般都會存放在RAM(內存中)里,但是如果運用虛擬存儲器技術可能會有一部分程序駐留在磁碟中。
RAM是與CPU進行數據交換等一些列操作的重要部件。計算機中程序的運行都離不開內存,因此內存的的好壞在一定程度上決定了計算機的好壞。
它用於暫時存放CPU中的運算數據,與硬碟等外部存儲器交換的數據。
(1)編譯會產生執行程序並保存在硬碟擴展閱讀:
內存的技術指標一般包括奇偶校驗、引腳數、容量、速度等。引腳數可以歸為內存的介面類型。
程序在計算機中運行經過的步驟:
1、編譯:
編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析、語法分析、語義檢查和中間代碼生成、代碼優化、目標代碼生成。
2、鏈接:
把所有編譯後得到的目標模塊連接裝配起來,再與函數庫相連接成一個整體。
3、裝載:
把程序裝入內存的操作系統程序
4、運行:
將可執行目標文件中的代碼和數據從磁碟復制到內存中,然後通過跳轉到程序的第一條指令或入口點來運行程序。
參考資料來源:網路-計算機
Ⅱ 編譯程序安裝在計算機的哪裡
舉例來說:
當你使用C編寫代碼,使用編譯器編譯後,即生成了可執行程序。當可執行程序被操作系統的載入器載入到內存、並准備好必要的數據後從代碼段開始執行,這時的代碼段代碼已經是機器碼了,無須編譯。當然,可執行程序里的所有數據並非都是代碼,有些是寫給操作系統看的,以使操作系統能為程序的執行做好必要准備。
至於說DOS命令,分為外部命令和內部命令。外部命令和一般的可執行程序沒有區別,他以可執行程序文件的形式存在。沒有這個文件就不能運行這個命令;內部命令是固化在操作系統中的代碼模塊,一般以DLL文件的形式存在。至於哪個DLL文件包含特定的內部命令的代碼,就必須查資料了。
CPU所支持的指令集,是由CPU的物理設計決定的,並不是說有什麼指令存放在CPU上。
當然,如果是解釋性的語言。那麼,可執行程序是一邊被解釋(編譯)一邊被執行的。所以他的速度要慢些。並且必須安裝對應的編譯(解釋)程序。比如JAVA。
Ⅲ 程序編譯後的機器碼是在內存,還是硬碟
程序編譯後,機器碼是存在硬碟。
在執行時,機器碼,被操作系統,讀入內存。
Ⅳ 編譯後的exe可執行程序是怎麼存儲的在c++中如何用語句或函數查看程序的存儲代碼
EXE File(可執行程序),一種可在操作系統存儲空間中浮動定位的可執行程序。MS-DOS和MS-WINDOWS下,此類文件擴展名為.exe
WINDOWS操作系統中的二進制可執行文件,可執行文件分兩種一種是後輟名為.COM另一種就是.EXE 。
.COM一般用於DOS,在WINDOWS系統中的執行文件一般都是.EXE文件。在 MS-DOS 中,用以標識可執行文件的文件擴展名。用戶在提示行中輸入不帶 .exe 擴展名的文件名後按 Enter 鍵就能運行可執行程序
EXE 文件比較復雜,每個EXE文件都有一個文件頭,結構如下:
EXE文件頭信息
―――――――――――――――――――
├ 偏移量 ┤意義┤
├00h-01h ┤MZ'EXE文件標記┤
├02h-03h ┤文件長度除512的余數┤
├04h-05h ┤...............商┤
├06h-07h ┤重定位項的個數┤
├08h-09h ┤文件頭除16的商┤
├0ah-0bh ┤程序運行所需最小段數 ┤
├0ch-0dh ┤..............大.... ┤
├oeh-0fh ┤堆棧段的段值 (SS)┤
├10h-11h ┤........sp┤
├12h-13h ┤文件校驗和┤
├14h-15h ┤IP┤
├16h-17h ┤CS┤
├18h-19h ┤............┤
├1ah-1bh ┤............┤
├1ch┤............┤
―――――――――――――――――――――――――
.EXE文件包含一個文件頭和一個可重定位程序映象。文件頭包含MS-DOS用於載入程序的信息,例如程序的大小和寄存器的初始值。文件頭還指向一個重定位表,該表包含指向程序映象中可重定位段地址的指針鏈表。文件頭的形式與EXEHEADER結構對應:
EXEHEADER STRUC
exSignature dw 5A4Dh ;.EXE標志
exExraBytes dw ;最後(部分)頁中的位元組數
exPages dw ;文件中的全部和部分頁數
exRelocItems dw ;重定位表中的指針數
exHeaderSize dw ;以位元組為單位的文件頭大小
exMinAlloc dw ;最小分配大小
exMaxAlloc dw ;最大分配大小
exInitSS dw ;初始SS值
exInitSP dw ;初始SP值
exChechSum dw ;補碼校驗值
exInitIP dw ;初始IP值
exInitCS dw ;初始CS值
exRelocTable dw ;重定位表的位元組偏移量
exOverlay dw ;覆蓋號
EXEHEADER ENDS程序映象
包含處理器代碼和程序的初始數據,緊接在文件頭之後。它的大小以位元組為單位,等於.EXE文件的大小減去文件頭的大小,也等於exHeaderSize的域的值乘以16。MS-DOS通過把該映象直接從文件拷貝到內存載入.EXE程序然後調整定位表中說明的可重定位段地址。
定位表是一個重定位指針數組,每個指向程序映象中的可重定位段地址。文件頭中的exRelocItems域說明了數組中指針的個數,exRelocTable域說明了分配表的起始文件偏移量。每個重定位指針由兩個16位值組成:偏移量和段值。 為載入.EXE程序,MS-DOS首先讀文件頭以確定.EXE標志並計算程序映象的大小。然後它試圖申請內存。首先,它計算程序映象文件的大小加上PSP的大小再加上EXEHEADER結構中的exMinAlloc域說明的內存大小這三者之和,如果總和超過最大可用內存塊的大小。則MS-DOS停止載入程序並返回一個出錯值。如果總和沒超過最大可用內存塊的大小,它便計算程序映象的大小加上PSP的大小再加上EXEHEADER結構中exMaxAlloc域說明的內存大小之和,如果第二個總和小於最大可用內存塊的大小,則MS-DOS 分配計算得到的內存量。否則,它分配最大可用內存塊。分配完內存後,MS-DOS確定段地址,也稱為起始段地址,MS-DOS從此處載入程序映象。如果exMinAlloc域和exMaxAlloc域中的值都為零,則MS-DOS把映象盡可能地載入到內存最高端。否則,它把映象載入到緊挨著PSP域之上。接下來,MS-DOS讀取重定位表中的項目調整所有由可重定位指針說明的段地址。對於重定位表中的每個指針,MS-DOS尋找程序映象中相應的可重定位段地址,並把起始段地址加到它之上。一旦調整完畢,段地址便指向了內存中被載入程序的代碼和數據段。 MS-DOS在所分配內存的最低部分建造256位元組的PSP,把AL和AH設置為載入 .COM程序時所設置的值。MS-DOS使用文件頭中的值設置SP與SS,調整SS初始值,把起始地址加到它之上。MS-DOS還把ES和DS設置為PSP的段地址.最後,MS-DOS從程序文件頭讀取CS和IP的初始值,把起始段地址加到CS之 上,把控制轉移到位於調整後地址處的程序。
具體參考:http://ke..com/view/41812.htm
Ⅳ 一個程序編譯完成後在內存中是如何存儲的
不存儲在內存條上,存儲在硬碟上,當需要程序運行時,程序被載入到內存條上。可以去看一下王爽的匯編語言,裡面有關於這個的介紹,看目錄就能找到了