2012-01-20 37 views
1

當像c程序可執行文件a.out這樣的進程正在運行時,RAM中應該存在哪些程序元素?程序代碼也在那裏嗎?如果是的話,它的需求是什麼?主存儲器中的程序元素

+0

[此鏈接](http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory)解釋很清楚: –

回答

1

是的,當a.out運行時,代碼a.out存在於內存中。指令指針(或寄存器)指向內存中正在執行的當前操作,並且大多數操作還將指令指針前進到下一個操作。儘管如果通過代碼來表示原始C代碼,但並非總是如此 - 只有組裝好的可執行字節代碼必須位於內存中。有編譯器/鏈接器的標誌將C代碼包含在彙編的輸出可執行文件中,以便於調試。如果我們正在談論進程的虛擬內存空間,這將包括一些內存映射的io寄存器,一些內核空間函數以及程序需要的任何庫(至少libc爲您的通用類型操作)。

0

原則上機器代碼在進程的地址空間內,而且經常在RAM中。但是,在某些情況下,機器代碼還不在RAM中,內核必須從磁盤加載它。這是透明的,因爲virtual memory。具體來說,系統調用會爲ELF可執行二進制文件中的各個段設置存儲器映射,這與mmap(2)(這是系統調用,munmapmprotect更改存儲器映射)非常相似。

查看進程1234的/proc/1234/maps瞭解更多,或者乾脆運行

cat /proc/self/maps 

獲得進程的內存映射運行cat

+0

哪些呢上面的命令做和我應該做的輸出是什麼 –

+0

嘗試該命令:它顯示了(執行該命令的進程的)內存映射的文本表示。然後閱讀我給你的其他鏈接。 –

0
Is program code also there? 

是你的程序代碼也將在RAM

actualy任何C程序在主內存3段

* Data Segment 
* Code Segment 
* Stack and Heap areas 

你的代碼放在代碼段。
enter image description here

This article