我已經定義了一個通過套接字發送的結構。我想得到它的大小,但sizeof
是不安全的,並且對於「System.Runtime.InteropServices.MarshalSizeOf
」也是如此。有沒有辦法以安全的方式獲得尺寸?C#爲什麼sizeof是不安全的,以及如何以安全的方式獲取結構的大小?
5
A
回答
3
無法爲託管結構執行此操作。 Marshal.SizeOf
將僅返回構成結構的編組類型數據的大小...... 可能對於某些平臺上的託管類型是正確的,但對其他平臺沒有。
這是由設計決定的,所以JIT可以根據運行的平臺對結構進行不同的佈局。
此處瞭解詳情:Chris Brumme's blog
0
的包裝庫,讓你判斷一下JIT將定義託管類型的大小將是(在運行時)查看my blog post。它通過使用在C#中完全不公開的IL指令sizeof
來工作。它可以在沒有特別許可的情況下運行,並且可以驗證。
注意:這可能是也可能不是你真正想要的。對於實際上只有一個字節的結構,這可能會返回8
。我完全不瞭解你的問題,所以我不確定這是否是你想要的。
相關問題
- 1. 如何以及爲什麼此代碼是線程安全的..?
- 2. 什麼是C/C++中的「安全」和「不安全」代碼?
- 3. 如何以安全的方式
- 4. 以安全方式乘以分數c#
- 5. 什麼是安全堆大小?
- 6. mailx與uuencode是否安全,如果不是安全的方式
- 7. 爲什麼C#中的ArrayList不安全?
- 8. Asp.net的ConnectionString以安全的方式
- 9. 爲什麼我的安全iframe被報告爲不安全?
- 10. 創建安全架構的最佳方式是什麼?
- 11. 如何以線程安全的方式訪問c#WPF控件?
- 12. 如何在C/Cilk中以線程安全的方式打印?
- 13. 以安全的方式發送數據
- 14. .NET Process.Kill()以安全的方式
- 15. 'sass'以非線程安全的方式
- 16. 什麼是讀取PHP $ _REQUEST超全局的安全方法?
- 17. Java/Scala以類型安全的方式獲取字段引用
- 18. 如何知道本地方法是安全/不安全的?
- 19. 如何以線程安全且處理安全的方式保留文件名
- 20. 如何以安全的方式將char **變量轉換爲char *&?
- 21. __caller__爲什麼不安全?
- 22. 這爲什麼不安全?
- 23. 如果T可以無效,我如何安全地獲取sizeof(T)?
- 24. 安全的方式
- 25. 爲什麼固定大小的緩衝區(數組)必須是不安全的?
- 26. 爲什麼ConcurrentHashMap.putifAbsent是安全的?
- 27. 爲什麼是安全的弦
- 28. 爲什麼有相同的安全組,以及如何可以有不同的VPC?
- 29. 什麼是「頂級JSON陣列」,以及它們爲何存在安全風險?
- 30. 類型安全的階層式結構
定義安全。就CLR而言,Marshal.SizeOf是完全安全的。 – Noldorin 2010-03-10 16:50:52
Noldorin - Marshal.SizeOf要求執行UnSafe Code權限。這是OP的問題 – 2010-03-10 16:53:55
我試過System.Runtime.InteropServices.MarshalSizeOf(typeof(MyStruct))並且在任何地方都沒有「unsafe」,也沒有選中Allow unsafe code複選框。現在對我來說很好。 ?????? – 5YrsLaterDBA 2010-03-10 17:07:22