第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Memory<T>.Span 中的內(nèi)存是如何取消固定的?

Memory<T>.Span 中的內(nèi)存是如何取消固定的?

C#
慕慕森 2022-10-23 16:51:19
我相信以下兩段代碼應(yīng)該是等效的:// first examplestring s = "Hello memmory";ReadOnlyMemory<char> memory = s.AsMemory();using (MemoryHandle pin = memory.Pin()){    Span<char> span = new Span<char>(pin.Pointer, 1);    Console.WriteLine(span[0]);}// second exampleReadOnlySpan<char> span2 = memory.Span;Console.WriteLine(span2[0]);兩個(gè)代碼都將打印“H”。我不明白的是第二個(gè)示例中的內(nèi)存取消固定在哪里。據(jù)我了解,字符串是在MemoryHandle堆上分配的,固定它并從指針創(chuàng)建跨度。MemoryHandle.Dispose取消固定記憶。我相信也memory.Span必須固定內(nèi)存,否則 span 無(wú)法訪問(wèn)指針。但是第二個(gè)例子中的內(nèi)存是如何取消固定的呢?
查看完整描述

2 回答

?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

最后一個(gè)假設(shè)是不正確的:memory.Span不需要固定內(nèi)存,因?yàn)槔占髦浪牡讓右?。如果您想將指針傳遞給本機(jī) API,則固定是獨(dú)立可用的。



查看完整回答
反對(duì) 回復(fù) 2022-10-23
?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊

Span 僅存在于當(dāng)前方法線程的堆棧上,而不存在于它的堆上,因此只要您在那里使用它,它就會(huì)一直存在。到目前為止很清楚。


現(xiàn)在有趣的部分:


明確的事實(shí)是,結(jié)果memory.Span不是固定的,而是僅通過(guò)使用GarbageCollector 也觀察到的托管指針的 .net 概念ref T內(nèi)部來(lái)引用。Span<T>


只要您的記憶還存在,您的跨度也將如此,由此您的跨度。


參考:


https://msdn.microsoft.com/en-us/magazine/mt814808.aspx?f=255&MSPPError=-2147217396 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ ref#ref-struct-types


查看完整回答
反對(duì) 回復(fù) 2022-10-23
  • 2 回答
  • 0 關(guān)注
  • 145 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)