有沒有辦法打印出操作系統可以在c中處理的最低和最高內存地址?c中的最低和最高內存地址?
回答
不,這不是標準C的功能。無論您需要哪種解決方案都需要特定於操作系統。
如果你有一些特定的操作系統,你應該提及它們。但我很難想,爲什麼這很重要。不需要編寫C程序,所以也許你可以啓發我們。
基於您的評論:
我很好奇,是「如果每個進程在內存中得到的地址空間,我可以能夠打印出該進程的頂部地址和底部地址?」
這又取決於操作系統。您的地址空間不一定是您擁有的物理內存,而是您可以解決的全部位置。例如,基於x86的操作系統可能會爲每個進程提供自己的4G地址空間,但您必須向操作系統請求「支持」內存(將實際內存放入該地址空間)。
而且其中一些地址空間實際上是在所有進程之間共享的(例如,操作系統可以加載其代碼的一個物理副本以供所有進程使用)。
你必須記住,虛擬內存和物理內存是非常不同的野獸。
謝謝,我明白了。 – root 2009-11-07 00:14:45
在Linux上,您可以通過查看/proc/[PID]/maps
詢問內存映射是否存在任何正在運行的進程;見proc(5)。例如:
$ cat /proc/self/maps
08048000-0804f000 r-xp 00000000 03:01 63119 /bin/cat
0804f000-08050000 rw-p 00006000 03:01 63119 /bin/cat
08050000-08071000 rw-p 08050000 00:00 0 [heap]
b7c58000-b7e09000 r--p 00000000 03:05 243564 /usr/lib/locale/locale-archive
b7e09000-b7e0a000 rw-p b7e09000 00:00 0
b7e0a000-b7f39000 r-xp 00000000 03:01 63497 /lib/libc-2.7.so
b7f39000-b7f3a000 r--p 0012f000 03:01 63497 /lib/libc-2.7.so
b7f3a000-b7f3c000 rw-p 00130000 03:01 63497 /lib/libc-2.7.so
b7f3c000-b7f40000 rw-p b7f3c000 00:00 0
b7f5b000-b7f5c000 rw-p b7f5b000 00:00 0
b7f5c000-b7f76000 r-xp 00000000 03:01 63276 /lib/ld-2.7.so
b7f76000-b7f78000 rw-p 00019000 03:01 63276 /lib/ld-2.7.so
bfc83000-bfc98000 rw-p bffeb000 00:00 0 [stack]
ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
對於這個過程,在內存映射中的最後一項是0xfffff000,所以最後尋址的字節是0xfffff000 - 1
在有虛擬內存和內存保護,現代操作系統進程地址空間的邊界不是靜態的。從堆中分配內存時,可以通過操作系統將更多物理內存映射到地址空間來實現,從而導致該空間增大。
這裏最重要的是進程內存和操作系統內存是完全不同的東西。所以說「在C中」,你是否真的意味着與進程內存空間不同?
我建議this可以幫助,至少給你一些方向。 另一件事是brk(2)/ sbrk(2)。這些機制並不經常用於我的經驗展示。
簡單的答案是,在32位地址系統(例如)上,地址範圍是[0x00000000, 0xFFFFFFFF]
。但是這並不意味着你可以在該範圍內的每個字節實際訪問。您需要知道操作系統和編譯器如何安排程序中的內存,即靜態數據段的位置,堆的位置,堆棧的位置等。
並且實現比任何給定的程序運行在現代操作系統上,大部分地址空間都是未映射的。使用虛擬內存,每個進程都有自己的地址空間,以便在一個進程中地址0x0010F444
(例如)處的字節與每個其他進程中相同地址處的字節完全不同的物理字節。
此外,堆可能不是連續的,有地址空間中有內存映射文件以及共享庫代碼。唷! – Artelius 2009-11-07 04:16:41
- 1. 高VS低內存地址和分支
- 2. 我們如何找到堆的最高地址和最低地址
- 3. 最高和最低的平均C++
- 4. 浮動最低和最高
- 5. 訂購最高和最低
- 6. 最高值和最低值
- 7. 在窗口中獲取最低空閒虛擬內存地址
- 8. 最高到最低
- 9. 如何確定C#中的最高和最低整數?
- 10. 找到最高和最低的號碼
- 11. 找到最低和最高的多列
- 12. 顯示最高和最低的輸入
- 13. 高中最低,最高門檻
- 14. 低內存地址0x4c和0x4e
- 15. 確定最高和最低編號(Java)
- 16. Codewars:解決Kata - 最高和最低
- 17. Python列表 - 最高和最低
- 18. MiPS32bits什麼是最高和最低值?
- 19. Java - 最高,最低和平均水平
- 20. 顯示最高和最低值Sqlplus
- 21. 爪哇 - 最高,最低和平均
- 22. Excel - Octects的最低IP地址
- 23. Android最低內存量
- 24. 最高,最低和和在java中扣除的答案
- 25. 查找數組C++中最高/最低元素的問題
- 26. 如何查找最高(最新)和最低(最早)日期[R]
- 27. 確定最高和最低的數字數組中的
- 28. C++內存地址?
- 29. 查找序列中下一個最高和最低的數字
- 30. 在輸入的10個數字中找到最高和最低
我認爲,如果通過添加要找到該問題的答案來嘗試完成的任務來澄清問題,則可能更容易回答「否」之外的任何內容。瞭解您的流程可以從堆中分配多少?能夠將更廣泛的指針值分類爲無效,以進行調試?提供更多關於你的環境的背景信息會有所幫助。 – 2009-11-06 23:24:33
你想知道計算機有多少物理內存?請記住,並非所有物理內存地址都映射到RAM。有些映射到ROM,有些映射到I/O區域,有些映射到任何地方。這取決於您的操作系統,處理器(32或64位?),主板,硬件,系統配置等等。 - 非常複雜的問題,您的問題太模糊。 – Artelius 2009-11-06 23:27:24
最低? '0'。最高? 'wc -c/dev/mem | perl -le'printf(「%x \ n」,<>)''Muahahahahah! ;) – 2009-11-06 23:32:32