C# 記憶體管理
Windows使用一個系統:虛擬定址系統,該系統把程式可用的記憶體地址對映到硬體記憶體中的實際地址上,這些任務完全由Windows在後臺管理。其實際結果是”位處理器上的每個程式都可以使用4GB的記憶體ˉ—無論計算機上實際有多少硬碟空間(在64位處理器上,這個數字會更大。這個4GB的記憶體實際上包含了程式的所有部分,包括可執行程式碼、載入的所有DLL,以及程式執行時使用的所有變數的內容。這個4GB的記憶體稱為虛擬地址空間,或虛擬記憶體。
4GB中的每個儲存單元都是從0開始往上排序的。要訪問儲存在記憶體的某個空間中的一個值,就需要提供表示該儲存單元的數字。在任何複雜的高階語言中,如VB、C#和Java,編譯器負責把人們可以理解的變數名轉換為處理器可以理解的記憶體地址。
在程式的虛擬記憶體中 ,有一個區域稱為棧。棧儲存不是物件成員的值資料型別。另外,在呼叫一個方法時 ,也使用棧儲存傳遞給方法的所有引數的副本 。
棧指標(作業系統維護的一個變數表示棧中下一個空閒儲存單元的地址。程式第一次開始執行時,棧指標指向為棧保留的記憶體塊末尾。棧實際上是向下填充的,即從高記憶體地址向低記憶體地址填充。當資料入棧後,棧指標就會隨之調整,以始終指向下一個空閒儲存單元。這種情況如圖13-1所示。在該圖中,顯示了棧指標8O000(十六進位制的OxC3500),下一個空閒儲存單元是地址799999。
注意,與棧不同,堆上的記憶體是向上分配的,所以空閒空間在已用空間的上面。
整理自:C#高階程式設計
擴充閱讀:
.Net 垃圾回收機制原理(一)
.Net 垃圾回收機制原理(二)
.Net 垃圾回收和大物件處理
.NET中的六個重要概念:棧、堆、值型別、引用型別、裝箱和拆箱
相關文章
- 記憶體管理 記憶體管理概述記憶體
- C# 記憶體管理優化暢想----前言C#記憶體優化
- 記憶體管理篇——實體記憶體的管理記憶體
- 【記憶體管理】記憶體佈局記憶體
- C#記憶體管理—職場生存的必修課C#記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- C# 記憶體對齊C#記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- Flink記憶體管理記憶體
- 記憶體管理-swMemoryGlobal記憶體
- MySQL記憶體管理MySql記憶體
- JavaScript 記憶體管理JavaScript記憶體
- iOS 記憶體管理iOS記憶體
- Android記憶體管理Android記憶體
- OC記憶體管理記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- Linux實體記憶體管理Linux記憶體
- C++記憶體管理C++記憶體
- Windows記憶體管理-分段Windows記憶體
- JavaScript的記憶體管理JavaScript記憶體
- CF的記憶體管理。記憶體
- HotSpot JVM 記憶體管理HotSpotJVM記憶體
- iOS 記憶體管理MRCiOS記憶體
- “理解”iOS記憶體管理iOS記憶體
- iOS 記憶體管理研究iOS記憶體
- 01記憶體管理-概述記憶體
- python的記憶體管理Python記憶體
- 管理 Bitmap 記憶體(譯)記憶體
- C# 記憶體的理解 通俗說C#記憶體
- C# 垃圾回收釋放記憶體C#記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- 從C++看C#託管記憶體與非託管記憶體C++C#記憶體
- Go記憶體管理逃逸分析Go記憶體
- Linux 記憶體區管理 slabLinux記憶體
- linux記憶體管理(二)- vmallocLinux記憶體