當像c程序可執行文件a.out這樣的進程正在運行時,RAM中應該存在哪些程序元素?程序代碼也在那裏嗎?如果是的話,它的需求是什麼?主存儲器中的程序元素
回答
是的,當a.out運行時,代碼a.out存在於內存中。指令指針(或寄存器)指向內存中正在執行的當前操作,並且大多數操作還將指令指針前進到下一個操作。儘管如果通過代碼來表示原始C代碼,但並非總是如此 - 只有組裝好的可執行字節代碼必須位於內存中。有編譯器/鏈接器的標誌將C代碼包含在彙編的輸出可執行文件中,以便於調試。如果我們正在談論進程的虛擬內存空間,這將包括一些內存映射的io寄存器,一些內核空間函數以及程序需要的任何庫(至少libc爲您的通用類型操作)。
原則上機器代碼在進程的地址空間內,而且經常在RAM中。但是,在某些情況下,機器代碼還不在RAM中,內核必須從磁盤加載它。這是透明的,因爲virtual memory。具體來說,系統調用會爲ELF可執行二進制文件中的各個段設置存儲器映射,這與mmap(2)(這是系統調用,munmap
和mprotect
更改存儲器映射)非常相似。
查看進程1234的/proc/1234/maps
瞭解更多,或者乾脆運行
cat /proc/self/maps
獲得進程的內存映射運行cat
。
哪些呢上面的命令做和我應該做的輸出是什麼 –
嘗試該命令:它顯示了(執行該命令的進程的)內存映射的文本表示。然後閱讀我給你的其他鏈接。 –
Is program code also there?
是你的程序代碼也將在RAM
actualy任何C程序在主內存3段
* Data Segment
* Code Segment
* Stack and Heap areas
你的代碼放在代碼段。
- 1. .net中繼器 - 存儲當前元素
- 2. MMU如何將程序從輔助存儲器加載到主存儲器
- 3. 設置主存儲過程中執行存儲過程的順序
- 4. 將元素存儲到單元格中
- 5. AVR程序存儲器
- 6. 在主機上存儲的LXC容器內運行程序
- 7. 存儲,刪除數組中的元素
- 8. 如何在瀏覽器中存儲由jQuery創建的本地存儲元素?
- 9. 元素如何在.Net中的容器中存儲?
- 10. 元素的childern存儲在元素或樹節點中?
- 11. 在AHK中讀程序存儲器
- 12. 存儲元素與TableLayout
- 13. NSMutableArray不存儲元素
- 14. 將列表中的元素按升序存儲
- 15. 排序使用jQuery存儲在變量中的Div元素
- 16. 如何將元素的順序存儲到數組中
- 17. 在jQuery中存儲樹元素
- 18. jQuery將元素存儲在變量中
- 19. 在html元素中存儲jquery數據
- 20. 在knockout.js viewmodel中存儲特定元素
- 21. 將數據存儲到元素中
- 22. 在tmx文件中存儲xml元素?
- 23. 將數據存儲在html元素中
- 24. 如何在數組中存儲元素?
- 25. Stack中存儲了多少個元素?
- 26. 創建主存儲過程
- 27. iOS7下的「主」視圖中的元素的哪個存儲(弱或強)
- 28. C++ 0x元組存儲元素向後
- 29. 多個存儲的元素的CSS()
- 30. 序列化OpenXML零件元素存儲在VARBINARY SQL 2005中
[此鏈接](http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory)解釋很清楚: –