C#托管內(nèi)存與非托管內(nèi)存之間的轉(zhuǎn)換的實(shí)例講解-創(chuàng)新互聯(lián)

c#有自己的內(nèi)存回收機(jī)制,所以在c#中我們可以只new,不用關(guān)心怎樣delete,c#使用gc來清理內(nèi)存,這部分內(nèi)存就是managed memory,大部分時(shí)候我們工作于c#環(huán)境中,都是在使用托管內(nèi)存,然而c#畢竟運(yùn)行在c++之上,有的時(shí)候,(比如可能我們需要引入一些第三方的c++或native代碼的庫,在Unity3d開發(fā)中很常見)我們需要直接在c#中操縱非托管的代碼,這些non-managed memory我們就需要自己去處理他們的申請(qǐng)和釋放了, c# 中提供了一些接口,完成托管和非托管之間的轉(zhuǎn)換,以及對(duì)這部分內(nèi)存的操作。

10年積累的成都做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有同仁免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

基本上有以下幾種:

1.managed memory-> unmanaged memory

比如在c#中調(diào)用第三方的某個(gè)c++庫,庫中有個(gè)函數(shù)是void func(float * data, int length).我們需要傳入給data的就應(yīng)該是一個(gè)非托管的代碼(why?首先傳入托管的內(nèi)存,c#層很可能會(huì)把它gc掉,而c++還在使用,而且托管的mem它的指針地址可能會(huì)發(fā)生改變,因此直接傳給c++可能拿到的地址是錯(cuò)誤的)

代碼如下:

using System.Runtime.InteropServices;
float[] _managed_data =... // this is the c# managed data
GCHandle unmanaged_data_handle = GCHandle.Alloc(_managed_data, GCHandleType.Pinned); //這里將標(biāo)記_managed_data暫時(shí)不能被gc回收,并且固定對(duì)象的地址
func(unmanaged_data_handle.AddrOfPinnedObject(),_managed_data.Length);//這里將拿到非托管內(nèi)存的固定地址,傳給c++
unmanaged_data_handle.Free();//使用完畢后,將其handle free,這樣c#可以正常gc這塊內(nèi)存

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

標(biāo)題名稱:C#托管內(nèi)存與非托管內(nèi)存之間的轉(zhuǎn)換的實(shí)例講解-創(chuàng)新互聯(lián)
鏈接分享:http://bm7419.com/article26/dgopjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、商城網(wǎng)站、網(wǎng)站排名、外貿(mào)建站、網(wǎng)站制作、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)