国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 行業(yè)動態(tài) > 坑一:sizeof(bool) = ?

坑一:sizeof(bool) = ?

時間:2022-04-28 21:03:01 | 來源:行業(yè)動態(tài)

時間:2022-04-28 21:03:01 來源:行業(yè)動態(tài)

絕大多數(shù)的基本類型屬于Blittable Types8:如System.Byte, System.Single等。System.Boolean雖然不屬于Blittable types,但是Standard Marshalling Service默認將其轉(zhuǎn)換為1,2,4字節(jié)的內(nèi)存存儲,當其值為true時,其對應的值為1。如果你想當然的直接將System.Boolean映射到Unmanaged側(cè)的bool類型而不做特別處理的話,你并一定會理解碰到編譯或者運行時錯誤,但是如果你嚴格的測試每個字段是,會驚訝的發(fā)現(xiàn)這些bool值跟你想象的不盡相同:有時正確,有時錯誤。

經(jīng)過調(diào)試跟蹤,動態(tài)打印sizeof(bool)來確認Unmanaged側(cè)bool類型數(shù)據(jù)長度后,你會發(fā)現(xiàn)System.Boolean默認會被保存為4個字節(jié)長度,而在macOS環(huán)境下(對于其它環(huán)境,需要自行認證),C 定義的bool其實只有一個字節(jié)。因此當你在Unmanaged側(cè)取bool值的時候,其實只讀取了System.Boolean的1/4個字節(jié)而已。而當你聲明了多個連續(xù)的System.Boolean/bool值時,可能在Unmanaged側(cè)讀取的這幾個bool值僅僅是第一個System.Boolean值的不同偏移字節(jié)而已。

知道了原因,解決方案自然就出來了,在Managed側(cè)強制聲明System.Boolean字段封送到Unmanaged側(cè)時僅使用一個字節(jié):

[MarshallAs(UnmanagedType.U1)]publicboolTrueOrFalse;

關(guān)鍵詞:

74
73
25
news

版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉