日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gcnew 与 new 的区别

發布時間:2025/3/19 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcnew 与 new 的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++/CLI中使用gcnew關鍵字表示在托管堆上分配內存,并且為了與以前的指針區分,用^來替換* ,就語義上來說他們的區別大致如下:

  • gcnew返回的是一個句柄(Handle),而new返回的是實際的內存地址.
  • gcnew創建的對象由虛擬機托管,而new創建的對象必須自己來管理和釋放.
  • 那什么又是托管堆呢?
    內存格局通常分為四個區
    全局數據區:存放全局變量,靜態數據,常量
    代碼區:存放所有的程序代碼
    棧區:存放為運行而分配的局部變量,參數,返回數據,返回地址等,
    堆區:即自由存儲區
    值類型變量與引用類型變量的內存分配模型也不一樣。為了理解清楚這個問題,讀者首先必須區分兩種不同類型的內存區域:線程堆棧(Thread Stack)和托管堆(Managed Heap)。
    每個正在運行的程序都對應著一個進程(process),在一個進程內部,可以有一個或多
    個線程(thread),每個線程都擁有一塊“自留地”,稱為“線程堆?!?#xff0c;大小為1M,用于保
    存自身的一些數據,比如函數中定義的局部變量、函數調用時傳送的參數值等,這部分內存
    區域的分配與回收不需要程序員干涉。
    所有值類型的變量都是在線程堆棧中分配的。
    另一塊內存區域稱為“堆(heap)”,在.NET 這種托管環境下,堆由CLR 進行管理,所
    以又稱為“托管堆(managed heap)”。
    用new 關鍵字創建的類的對象時,分配給對象的內存單元就位于托管堆中。
    在程序中我們可以隨意地使用new 關鍵字創建多個對象,因此,托管堆中的內存資源
    是可以動態申請并使用的,當然用完了必須歸還。
    打個比方更易理解:托管堆相當于一個旅館,其中的房間相當于托管堆中所擁有的內存
    單元。當程序員用new 方法創建對象時,相當于游客向旅館預訂房間,旅館管理員會先看一下有沒有合適的空房間,有的話,就可以將此房間提供給游客住宿。當游客旅途結束,要辦理退房手續,房間又可以為其他旅客提供服務了。
    從表 1 可以看到,引用類型共有四種:類類型、接口類型、數組類型和委托類型。
    所有引用類型變量所引用的對象,其內存都是在托管堆中分配的。
    嚴格地說,我們常說的“對象變量”其實是類類型的引用變量。但在實際中人們經常將
    引用類型的變量簡稱為“對象變量”,用它來指代所有四種類型的引用變量。
  • 總結

    以上是生活随笔為你收集整理的gcnew 与 new 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。