如果我們有一個字符串"A"
和數字65,因爲它們在內存中看起來相同,操作系統如何知道哪個字符串和哪個數字?操作系統如何檢測數字和字符串?
另一個問題 - 假設一個程序分配一些內存(比如說一個字節)。操作系統如何記住內存分配的位置?
如果我們有一個字符串"A"
和數字65,因爲它們在內存中看起來相同,操作系統如何知道哪個字符串和哪個數字?操作系統如何檢測數字和字符串?
另一個問題 - 假設一個程序分配一些內存(比如說一個字節)。操作系統如何記住內存分配的位置?
這些細節都不由操作系統處理。它們由用戶程序處理。
對於你的第一個問題,在內存內部,字符'A'和數值65(當然,假設你只是查看一個字節的數據)之間絕對沒有區別。當你看到這些位被程序解釋時會產生差異。例如,如果用戶程序試圖將字符串打印到屏幕上,則可能會向操作系統發出一些系統調用請求操作系統打印該字符。在這種情況下,OS中的代碼由一系列彙編指令組成,以在顯示設備中的某處複製這些位。然後,顯示器負責渲染一組合適的像素以繪製字符'A'。換句話說,該計劃從未「知道」該值是「A」。相反,硬件只是推動了一些控制另一塊代碼的位,最終將這些位轉換爲像素。
對於第二個問題,這真的取決於內存管理器。程序分配內存和知道存儲位置的方法很多。我不完全明白你在問什麼,但我相信這個答案應該是足夠了:
在操作系統級別,操作系統內核甚至不知道該字節被分配。相反,操作系統只是爲用戶程序分配巨大的內存塊,以便在運行時使用。程序終止時,所有內存都會被回收。
在方案一級,大多數程序包含存儲器管理器,與分配和七手八腳一個任務的代碼段大塊的存儲器成小塊,然後可以被程序使用。這通常將分配的內存作爲「塊」列表進行跟蹤,其中每塊內存都被視爲元素的雙向鏈表。每個塊通常用表示正在使用的信息和塊的大小來標註,這允許內存管理器在釋放內存後回收內存。
在用戶代碼級別,當您詢問內存時,通常會將其存儲在指針中以跟蹤內存的位置。這只是存儲地址的內存中的一系列字節,操作系統和內存管理器除非指示,否則永遠不會查看。
希望這有助於!
謝謝,有沒有什麼好的資源解釋它!我非常感謝你的回答! – undone
對於計算機,字符串是數字。一個最簡單的例子是一張ASCII表格,其中每個字母都附有一個數字。所以如果你對C很熟悉,你可以寫printf("%c", 0x65)
,實際上得到的是A
而不是數字。希望這是有道理的。
操作系統不記得程序分配的內存的位置。這就是pointers!
字符「A」和整數65在內存中以相同的方式存儲(至少在32位系統上)。然而,字符串「A」的存儲方式不同,可能取決於系統或編程語言。以C爲例,它將字符串存儲爲基本上由空字符和後跟空字符組成的數組。
操作系統使用內存管理器來跟蹤哪些進程正在使用哪些內存部分。
你的#1沒有多大意義。 – pyroscope
@ pyroscope-我認爲這實際上是一個非常合理的問題。計算機知道如何將不同類型的變量視爲不同的類型並不明顯,因爲它們在一天結束時看起來都是相同的。 – templatetypedef