C#中unsafe的使用


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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM