C#中不安全代碼的侷限性是什麼?例如,我可以像使用C或C++一樣進行幾乎任意的指針轉換和算術運算嗎?C中的不安全代碼#
12
A
回答
11
是的。當不安全時,All bets are off。
這是「不安全」背後的想法 - 即可驗證類型的「安全性」已被移除,並且您可以從一種類型的指針轉換爲另一種類型的指針,而無需運行時將運行時從shooting yourself in the foot中刪除所以願望 - 很像C或C++。
下面是在C#中使用不同的指針類型的例子:
fixed (Byte* dstBytes = ¤tImage[0])
{
var dstBuffer = (Int64*)dstBytes;
const int blockCount = ImageSizeInBytes/sizeof(Int64);
for (var j = 0; j < blockCount; j++)
{
dstBuffer[j] = srcBuffer[j];
}
}
注意陣列的類型爲Byte[]
,但我得到一個Byte*
後,我可以將它轉換爲Int64*
,並在8個字節工作時間。
1
是的,你可以在任何你喜歡的地方製作一個指針點。
但是,由於程序在虛擬地址空間中運行,因此只能訪問該空間中實際存在的內存,即無法訪問任何其他進程,並且無法訪問未訪問的內存「已被分配。
0
您可以瞭解更多信息請參考以下頁面:
http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx
不安全的代碼提供了對幾乎所有的原始變量聲明指針(基本類型)的能力;您可以在指針類型之間進行投射。指針運算基於指針類型的存儲大小,因此對指針應用後增量或後減量將通過sizeof(type)增加地址。
3
是的,這都是可能的。這裏是MSDN的Unsafe Code Tutorial。
對於所有這些說如何使用這是一個可怕的想法:是的,但它是有原因的。我不得不使用這個(第一次),通過第三方API獲取網絡攝像頭數據,返回Byte *
。
相關問題
- 1. 什麼是C/C++中的「安全」和「不安全」代碼?
- 2. 使不安全的代碼在C#安全
- 3. 如何編譯C#不安全代碼
- 4. .NET中的代碼安全
- 5. .NET Thread不安全代碼
- 6. 如何在安全比賽中使用不安全的代碼?
- 7. 下面的C代碼是否安全?
- 8. 爲什麼我的不安全代碼塊比我的安全代碼慢?
- 9. PHP代碼安全
- 10. Java代碼,安全
- 11. 不安全的代碼說明
- 12. 真正不安全的代碼性能
- 13. Silverlight和不安全的代碼
- 14. 憲兵不安全的代碼檢測
- 15. IntPtr和避免不安全的代碼
- 16. Mysqli的安全代碼
- 17. PHP的代碼安全性
- 18. 安全索引裏面不安全代碼
- 19. JavaScript中的安全/保護代碼
- 20. RaspberryPi/USB中的安全PHP代碼
- 21. .NET Micro Framework不安全代碼
- 22. c代碼片段中的安全缺陷?
- 23. c#不安全 - 在方法或代碼塊之前?
- 24. 安全透明代碼
- 25. 代碼訪問安全
- 26. 安全代碼評論
- 27. android本機代碼安全
- 28. TFS 2008源代碼安全
- 29. PHP代碼段安全
- 30. 避免使用不安全的代碼從C#通過參照C++/CLI
+1對於鏈接,(和一個很好的答案)。 – Sam 2013-06-04 14:00:02