gcnew 与 new 的区别
生活随笔
收集整理的這篇文章主要介紹了
gcnew 与 new 的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++/CLI中使用gcnew關鍵字表示在托管堆上分配內存,并且為了與以前的指針區分,用^來替換* ,就語義上來說他們的區別大致如下:
內存格局通常分為四個區
全局數據區:存放全局變量,靜態數據,常量
代碼區:存放所有的程序代碼
棧區:存放為運行而分配的局部變量,參數,返回數據,返回地址等,
堆區:即自由存儲區
值類型變量與引用類型變量的內存分配模型也不一樣。為了理解清楚這個問題,讀者首先必須區分兩種不同類型的內存區域:線程堆棧(Thread Stack)和托管堆(Managed Heap)。
每個正在運行的程序都對應著一個進程(process),在一個進程內部,可以有一個或多
個線程(thread),每個線程都擁有一塊“自留地”,稱為“線程堆棧”,大小為1M,用于保
存自身的一些數據,比如函數中定義的局部變量、函數調用時傳送的參數值等,這部分內存
區域的分配與回收不需要程序員干涉。
所有值類型的變量都是在線程堆棧中分配的。
另一塊內存區域稱為“堆(heap)”,在.NET 這種托管環境下,堆由CLR 進行管理,所
以又稱為“托管堆(managed heap)”。
用new 關鍵字創建的類的對象時,分配給對象的內存單元就位于托管堆中。
在程序中我們可以隨意地使用new 關鍵字創建多個對象,因此,托管堆中的內存資源
是可以動態申請并使用的,當然用完了必須歸還。
打個比方更易理解:托管堆相當于一個旅館,其中的房間相當于托管堆中所擁有的內存
單元。當程序員用new 方法創建對象時,相當于游客向旅館預訂房間,旅館管理員會先看一下有沒有合適的空房間,有的話,就可以將此房間提供給游客住宿。當游客旅途結束,要辦理退房手續,房間又可以為其他旅客提供服務了。
從表 1 可以看到,引用類型共有四種:類類型、接口類型、數組類型和委托類型。
所有引用類型變量所引用的對象,其內存都是在托管堆中分配的。
嚴格地說,我們常說的“對象變量”其實是類類型的引用變量。但在實際中人們經常將
引用類型的變量簡稱為“對象變量”,用它來指代所有四種類型的引用變量。
總結
以上是生活随笔為你收集整理的gcnew 与 new 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java - 排序大全
- 下一篇: C++ 知识点总结