學習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 產生...