1. unsafe在C#程序中的使用場合:
- 實時應用,采用指針來提高性能;
- 引用非.net DLL提供的如C++編寫的外部函數,需要指針來傳遞該函數;
- 調試,用以檢測程序在運行過程中的內存使用狀況。
2. 使用unsafe的利弊
好處是:性能和靈活性提高;可以調用其他dll的函數,提高了兼容性;可以得到內存地址;
麻煩是:非法修改了某些變量;內存泄漏。
3. unsafe與unmanaged的區別
managed code是在CLR監管下運行的程序。以下任務由CLR來執行:管理對象內存,類型安全檢測和冗余處理。從另一方面來說,unmanaged code也就是能由程序員直接進行內存操作的程序。而unsafe是介於managed和unmanaged之間的橋梁,它使得managed code也能使用指針來控制和操作內存。
4. unsafe的使用
unsafe可以用來修飾類、類的成員函數、類的全局變量,但不能用來修飾類成員函數內的局部變量。編譯帶有unsafe代碼的程序也要在“configuration properties>build” 中把允許unsafe代碼設為真。
但是在managed code中使用unsafe時也要注意,正因為CLR可以操作內存對象,假如你寫了一下代碼:
public unsafe void add(int *p) { *p=*p+4; }
p的地址值可能會在運行過程中被CLR所修改,這通常可采用fixed來處理,使指針所指向的地址不能被改變。如下:
int value = new int[2] { 1, 2 }; fixed(int *p=&value) { add(p); }
結果:
value = { 5, 2 }
---------------------
作者:wolf_baby
來源:CSDN
原文:https://blog.csdn.net/wolf_baby/article/details/755944
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!