C# (类型、对象、线程栈和托管堆)在运行时的相互关系
? 在介紹運(yùn)行時(shí)的關(guān)系之前,先從一些計(jì)算機(jī)基礎(chǔ)只是入手,如下圖:
該圖展示了已加載CLR的一個(gè)windows進(jìn)程,該進(jìn)程可能有多個(gè)線程,線程創(chuàng)建時(shí)會(huì)分配到1MB的棧空間.棧空間用于向方法傳遞實(shí)參,方法定義的局部變量也在實(shí)參上,上圖的右側(cè)展示了線程的棧內(nèi)存,棧從高位內(nèi)存地址向地位內(nèi)存地址構(gòu)建.圖中線程已經(jīng)執(zhí)行了一些代碼,棧中已經(jīng)存在了一些數(shù)據(jù)(圖中陰影部分),現(xiàn)在假定線程執(zhí)行的代碼要調(diào)用M1方法.
簡(jiǎn)單的方法執(zhí)行前運(yùn)行時(shí)會(huì)先執(zhí)行"序幕"代碼,在方法開始前對(duì)其進(jìn)行初始化,然后會(huì)執(zhí)行"尾聲"代碼,在方法做完工作后對(duì)其進(jìn)行清理,以便返回至其調(diào)用者.M1方法開始執(zhí)行時(shí),它的"序幕"代碼在線程棧上分配局部變量的name的內(nèi)存.如下圖所示:
然后M1方法調(diào)用M2方法,將局部變量name作為實(shí)參傳遞。這造成name局部變量的地址被壓入棧
轉(zhuǎn)載于:https://www.cnblogs.com/GreenLeaves/p/8018791.html
總結(jié)
以上是生活随笔為你收集整理的C# (类型、对象、线程栈和托管堆)在运行时的相互关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象开发===继承特点
- 下一篇: Python3 CookBook | 数