導航:首頁 > 軟體知識 > 程序執行代碼存放在什麼內存區域

程序執行代碼存放在什麼內存區域

發布時間:2022-11-12 06:29:21

① 程序中動態分配的內存存放在哪個區域

程序中動態分配的內存存放在堆內存區域。

叫「堆」。c語言:char *p1; //若是全局量,則在全局未初始化區,若是局部量,則在棧中。p1 = (char *)malloc(10); //分配得來得10位元組的區域在堆區。

c++語言: 用 new分配,用 delete釋放,在 堆區。用malloc分配,用 free釋放,在類似堆區的自由存儲區。堆不同於棧,它的數據結構並非由系統(無論是機器系統還是操作系統)支持,而是由函數庫提供的。

直接方式:

當時多道程序技術還沒出現,存儲器的可用空間一般是給定的。那時程序員在編程序時或編譯程序對源程序進行編譯時,使用實際的存儲器地址,這種分配方式使用戶與計算機內存直接打交道。

系統資源在某一時刻為一個用戶所獨占。當多道程序出現時就使用戶感到極不方便,因為用戶要自己做主存的分配工作,而且內存不止存放一個作業,這要求用戶必須知道每一個作業放在主存的什麼地方,這無疑增加了用戶的負擔,況且存儲空間的利用率也相當低。

② 程序執行完後前綴和存放在什麼位置

程序執行完後前綴和存放在寄存器。
寄存器是最快的存儲區,因為它位於不同於其他存儲區的地方處理器內部。但是寄存器的數量極其有限,所以寄存器根據需求進行分配。你不能直接控制,也不能在程序中感受到寄存器存在的任何跡象。

③ 程序運行時構成程序的指令存放在計算機的內存還是存儲器

內存就是存儲器,計算機存儲器分為內存儲器和外存儲器!程序運行時的程序指令在內存中!

④ 當計算機執行某一程序時,其運行時程序段應存儲在__ 內存嗎為什麼

一共六個不同的地方存儲數據:
寄存器(在CPu里,內存地址訪問) 堆棧 堆 靜態存儲 常量存儲 非RAM存儲
程序運行時,系統將為程序分配一塊存儲空間
目標程序區:用來存放目標代碼

靜態數據區:用來存放編譯時就能確定存儲空間的數據
運行棧區:用來存放運行時才能確定存儲空間的數據
運行堆區:用來存放運行時用戶動態中請存儲空間的數據。

⑤ 在計算機里哪裡存放程序員寫的代碼

在我們的PC機子上的話,首先代碼存放在硬碟上,當運行程序時,調入內存中,稱之為
進程調度
,由PC寄存器指向,CPU執行
機器代碼
,當結束進程的時候,系統回收內存,釋放空間。

⑥ 在計算機中,正在執行的程序的指令主要存放在()中。 A. CPU B. 磁碟 C. 內存 D. 鍵盤

內存。選擇C。

在計算機中,操作要求和操作數地址都由二進制數碼表示,分別稱作操作碼和地址碼,整條指令以二進制編碼的形式存放在存儲器中。這里存儲器,就是內存。

其作用是用於暫時存放CPU中的運算數據,以及與硬碟等外部存儲器交換的數據。只要計算機在運行中,CPU就會把需要運算的數據調到內存中進行運算,當運算完成後CPU再將結果傳送出來,內存的運行也決定了計算機的穩定運行。

(6)程序執行代碼存放在什麼內存區域擴展閱讀:

內存就是暫時存儲程序以及數據的地方,比如當我們在使用WPS處理文稿時,當你在鍵盤上敲入字元時,它就被存入內存中,當你選擇存檔時,內存中的數據才會被存入硬(磁)盤。

奇/偶校驗(ECC)是數據傳送時採用的一種校正數據錯誤的一種方式,分為奇校驗和偶校驗兩種。

如果是採用奇校驗,在傳送每一個位元組的時候另外附加一位作為校驗位,當原來數據序列中「1」的個數為奇數時,這個校驗位就是「0」,否則這個校驗位就是「1」,這樣就可以保證傳送數據滿足奇校驗的要求。

在接收方收到數據時,將按照奇校驗的要求檢測數據中「1」的個數,如果是奇數,表示傳送正確,否則表示傳送錯誤。

同理偶校驗的過程和奇校驗的過程一樣,只是檢測數據中「1」的個數為偶數。

⑦ 計算機執行的程序在沒有啟動時存放在()中

計算機執行的程序在沒有啟動時存放在外存中。

PC機常見的外存儲器有軟盤存儲器、硬碟存儲器、光碟存儲器等。磁碟有軟磁碟和硬磁碟兩種。光碟有隻讀型光碟CD-ROM、一次寫入型光碟WORM和可重寫型光碟MO三種。

(7)程序執行代碼存放在什麼內存區域擴展閱讀:

存儲器的種類很多,按其用途可分為主存儲器和輔助存儲器,主存儲器又稱內存儲器(簡稱內存),輔助存儲器又稱外存儲器(簡稱外存)。內存儲器最突出的特點是存取速度快,但是容量小、價格貴;外存儲器的特點是容量大、價格低,但是存取速度慢。內存儲器用於存放那些立即要用的程序和數據;外存儲器用於存放暫時不用的程序和數據。內存儲器和外存儲器之間常常頻繁地交換信息。

外存通常是磁性介質或光碟,像硬碟,軟盤,磁帶,CD等,能長期保存信息,並且不依賴於電來保存信息,但是由機械部件帶動,速度與CPU相比就顯得慢的多。

⑧ c語言指針面試常見問題

c語言指針面試常見問題

指針的使用,一直是c語言面試題中必考的部分,因為指針本身使用的復雜性與普適性,所以考點非常多,而且也可以與其他知識相互結合,因此我們將會使用五篇專題的篇幅來介紹指針。

分析下面的程序,指出程序中的錯誤:

本題解析

沒有正確為str分配內存空間,將會發生異常。問題出在將一個字元串復制進一個字元變數指針所指地址。雖然編譯的時候沒有報錯,但是在運行過程中,因為越界訪問了未被分配的內存,而導致段錯誤。

相關知識點

在處理與指針相關的問題時,首先需要搞明白的就是內存,因為指針操作的就是內存。

第一個,就是內存的分區。這也是經常會被考察的一個考點。

寫出內存分為幾大區域

對於這個問題,有幾種不同的說法,有的說內存分為五大分區,有的說分為四大分區,我們先來看五大分區的說法:

認為內存分為五大分區的人,通常會這樣劃分:

1、BSS段( bss segment )

通常是指用來存放程序中未初始化的'全局變數和靜態變數 (這里注意一個問題:一般的書上都會說全局變數和靜態變數是會自動初始化的,那麼哪來的未初始化的變數呢?變數的初始化可以分為顯示初始化和隱式初始化,全局變數和靜態變數如果程序員自己不初始化的話的確也會被初始化,那就是不管什麼類型都初始化為0,這種沒有顯示初始化的就 是我們這里所說的未初始化。既然都是0那麼就沒必要把每個0都存儲起來,從而節省磁碟空間,這是BSS的主要作用)的一塊內存區域。BSS是英文Block Started by Symbol的簡稱。BSS段屬於靜態內存分配。 BSS節不包含任何數據,只是簡單的維護開始和結束的地址,即總大小。以便內存區能在運行時分配並被有效地清零。BSS節在應用程序的二進制映象文件中並不存在,即不佔用 磁碟空間 而只在運行的時候佔用內存空間 ,所以如果全局變數和靜態變數未初始化那麼其可執行文件要小很多。

2、數據段(data segment)

通常是指用來存放程序中已經初始化的全局變數和靜態變數的一塊內存區域。數據段屬於靜態內存分配,可以分為只讀數據段和讀寫數據段。字元串常量等,但一般都是放在只讀數據段中。

3、代碼段(code segment/text segment)

通常是指用來存放程序執行代碼的一塊內存區域。這部分區域的大小在程序運行前就已經確定,並且內存區域通常屬於只讀, 某些架構也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數變數,例如字元串常量等,但一般都是放在只讀數據段中 。

4、堆(heap)

堆是用於存放進程運行中被動態分配的內存段,它的大小並不固定,可動態擴張或 縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張); 當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)

5、棧 (stack)

棧又稱堆棧, 是用戶存放程序臨時創建的局部變數,也就是說我們函數括弧「{}」 中定義的變數(但不包括static聲明的變數,static意味著在數據段中存放變 量)。除此以外, 在函數被調用時,其參數也會被壓入發起調用的進程棧中,並且待到調用結束後,函數的返回值 也會被存放回棧中。由於棧的先進先出特點,所以 棧特別方便用來保存/恢復調用現場。從這個意義上講,我們可以把堆棧看成一個寄存、交換臨時數據的內存區。

而四大分區的說法,則這么認為:

1、堆區:

由程序員手動申請,手動釋放,若不手動釋放,程序結束後由系統回收,生命周期是整個程序運行期間。使用malloc或者new進行堆的申請,堆的總大小為機器的虛擬內存的大小。

說明:new操作符本質上是使用了malloc進行內存的申請,new和malloc的區別如下:

(1)malloc是C語言中的函數,而new是C++中的操作符。

(2)malloc申請之後返回的類型是void*,而new返回的指針帶有類型。

(3)malloc只負責內存的分配而不會調用類的構造函數,而new不僅會分配內存,而且會自動調用類的構造函數。

2、棧區:

由系統進行內存的管理。主要存放函數的參數以及局部變數。在函數完成執行,系統自行釋放棧區內存,不需要用戶管理。整個程序的棧區的大小可以在編譯器中由用戶自行設定,VS中默認的棧區大小為1M,可通過VS手動更改棧的大小。64bits的Linux默認棧大小為10MB,可通過ulimit -s臨時修改。

3、靜態存儲區:

靜態存儲區內的變數在程序編譯階段已經分配好內存空間並初始化。這塊內存在程序的整個運行期間都存在,它主要存放靜態變數、全局變數和常量。

注意:

(1)這里不區分初始化和未初始化的數據區,是因為靜態存儲區內的變數若不顯示初始化,則編譯器會自動以默認的方式進行初始化,即靜態存儲區內不存在未初始化的變數。

(2)靜態存儲區內的常量分為常變數和字元串常量,一經初始化,不可修改。靜態存儲內的常變數是全局變數,與局部常變數不同,區別在於局部常變數存放於棧,實際可間接通過指針或者引用進行修改,而全局常變數存放於靜態常量區則不可以間接修改。

(3)字元串常量存儲在靜態存儲區的常量區,字元串常量的名稱即為它本身,屬於常變數。

(4)數據區的具體劃分,有利於我們對於變數類型的理解。不同類型的變數存放的區域不同。後面將以實例代碼說明這四種數據區中具體對應的變數。

4、代碼區:

存放程序體的二進制代碼。比如我們寫的函數,都是在代碼區的。

通過上面的不同說法,我們也可以看出,這兩種說法本身沒有優劣之分,具體的內存劃分也跟編譯器有很大的關系,因此這兩種說法都是可以接受的,搞明白內存的分區之後,指針的使用才能夠更加的靈活。

;

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

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

⑩ 計算機的程序存放在哪個存儲器中,是內存還是外存儲器中

運行的時候是放在內存中。其他時候放在外存。你運行程序的時候,操作系統會申請內存,然後把程序放在內存中,運行

閱讀全文

與程序執行代碼存放在什麼內存區域相關的資料

熱點內容
拒收快遞多久可以查到信息 瀏覽:110
福鼎花茶代理要什麼條件 瀏覽:541
高級市場有哪些 瀏覽:20
通用技術表格中結構設計怎麼填 瀏覽:962
如何掃描鞋子防盜扣查看得物信息 瀏覽:462
太原最大菜市場在什麼地方 瀏覽:935
做程序的公司一般叫什麼名字 瀏覽:140
湖州市湖州市場在哪裡 瀏覽:594
如何選項目做代理商 瀏覽:424
如何做好企業信息安全防護工作 瀏覽:778
農業裝備技術是什麼期刊 瀏覽:477
幣圈交易所怎麼成為商戶 瀏覽:842
cnc在機床上怎麼弄字母程序 瀏覽:313
怎麼把任務欄程序並排顯示 瀏覽:789
數據字典符號都有哪些 瀏覽:381
新房代理公司怎麼做 瀏覽:592
車載視覺技術的功能有哪些 瀏覽:410
美國程序員多少美金一個月 瀏覽:164
我在昌吉職業技術學院英語怎麼說 瀏覽:170
招商銀行有哪些產品 瀏覽:486