c 相對底層的認識

2022-03-13 16:22:35 字數 891 閱讀 9741

學習c++之後,重新認識下c#,發現好理解 多 了 。記錄 下 。

1在記憶體中的存放

值型別在棧中,

引用型別在堆中(new 對於值型別只是乙個障眼法)。

2.引數的傳遞記憶體本質

值型別,   按位copy傳遞,值型別本身包含資料,所以按位copy,等於copy傳遞了資料本省的副本。

引用型別,按位copy傳遞,但是引用型別本身是指標,所以按位copy,等於copy傳遞了乙個位址而已。

3.引數的ref .out 語法糖

型別本質

具體表現

c++的同等表示

無修飾   (class a)

指標(如果是值型別,就是指本身)

修改資料會導致外部的變化,但是不能修改指標本身 

classa*

ref  (ref class a)

指標的指標(如果是值型別就是值的指標)

既可以修改資料,也可以修改指標

classa**

out(out class a)

null指標的指標 (進:強制空,出:強制賦值)

主要是表示必須給乙個新物件的指標給外部,用於多返回值問題。

out:函式外不需要先建立物件,再 傳引數 。因為函式內部 ,一定 會賦值。 如果非要建立,那就不需要額外的out 說明了 。

3.記憶體的釋放

using 語句中使用的物件必須實現 idisposable 介面,當離開作用範圍,會自動執行dispose。

認識 Git 底層儲存機制

眾所周知,git 是乙個非常強大的版本控制系統,要想支撐其運轉,底層的儲存結構是非常重要的。當我們使用 git init 新建乙個 git 倉庫時,會自動新建乙個 git 目錄。進入 git 目錄中,看看裡面有什麼 1.commit editmsg 檔案 commit editmsg 是每次提交時,...

C 的底層機制

c 為我們所提供的各種訪問控制僅僅是在編譯階段給我們的限制,也就是說是編譯器確保了你在完成任務之前的正確行為,如果你的行為不正確,那麼你休想構造出任何可執行程式來。但如果真正到了產生可執行 階段,無論是c,c 還是pascal,大家都一樣,你認為c和c 編譯器產生的機器 會有所不同嗎,你 認為c 產...

C 的底層機制

c 為我們所提供的各種訪問控制僅僅是在編譯階段給我們的限制,也就是說是編譯器確保了你在完成任務之前的正確行為,如果你的行為不正確,那麼你休想構造出任何可執行程式來。但如果真正到了產生可執行 階段,無論是c,c 還是pascal,大家都一樣,你認為c和c 編譯器產生的機器 會有所不同嗎,你認為c 產生...