C 記憶體分配學習

2022-03-22 00:17:34 字數 603 閱讀 4932

clr記憶體分配分三大塊區域:棧、gc堆、大物件堆。

一、執行緒堆疊(棧)

用於分配值型別例項。棧由作業系統進行管理,不受gc管理,當值型別不在其作用域(主要是指其所在函式內)時,其所佔棧空間自動釋放。棧的執行效率是非常高的。

二、gc堆(堆)

用於分配小物件例項。所謂小物件就是大小小於85000位元組的例項物件。gc堆分三代垃圾進行管理,當進行gc操作(垃圾**)時,垃圾收集器會對gc堆進行壓縮**。具體的gc操作(略)。

三、大物件堆(loh)

用於分配大物件例項。大物件就是大小小於85000位元組的例項物件。大物件分配在loh上,不受gc控制,不會被壓縮,只有在完全gc**時才會被**。

注意a.棧的分配是向低位址擴充套件,而堆的分配是向高位址擴充套件。

b.值引數與引用引數的本質,值引數是對棧中資料的拷貝,引用引數則是對棧位址的引用。當值引數為某引用物件時,可以改變該引用物件某些值,但不能將值改變成新物件的位址。

c.堆中的物件都有同步塊索引(佔4個位元組)、型別控制代碼(佔4個位元組)

d.靜態字段、靜態方法不和方法所分配的方式與區域-----方法表

記憶體分配學習

1.儲存類別 被儲存的每個值都占用一更的物理記憶體,c語言把這樣的一塊記憶體叫做物件。乙個物件可以儲存乙個或多個值。乙個物件可能未存實際的值,但是在儲存適當的值時一定具有相應的大小。可以用儲存期來描述物件,用識別符號訪問物件。用作用於和鏈結藐視識別符號。1.1作用域 作用域描述程式中可訪問識別符號的...

C 記憶體分配

總結 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是...

C 記憶體分配

c 中的記憶體主要分為五塊 全域性區 static 存放全域性變數或靜態變數 常量區 const 存放常量,不允許修改 可以通過特殊手段修改 堆 heap 由使用者自行分配和釋放,在程式執行時分配。由malloc分配,由free釋放 自由儲存區 free store 由new分配,由delete釋放...