2011-11-11 67 views
4

我正在阅读有关托管代码中的内存泄漏,并想知道是否有可能在C#不安全的代码中创建它?是不安全的C#垃圾收集

unsafe 
{ 
    while(true) new int; 
} 

我不确定这是否会被GC捕获,如果这是作为不安全的代码运行?

感谢

+4

我喜欢在代码段的每一个关键字是如何突出的蓝色圆形的代码。 – BoltClock

+3

这不会编译;它缺少括号。另外,'int'是一个不好的例子,因为它是一个值类型。 – SLaks

+1

+1这似乎是一个合理的问题。为什么倒票? – Daryl

回答

10

unsafe关键字只允许你使用不安全的代码(指针)。

它根本不会改变普通代码的语义。

5

IMO不安全只允许在内存中使用指针类型和proform C++风格指针操作。但要告诉垃圾收集器不要碰我的代码,用修复声明。

C#支持通过代码块内的指针进行直接内存操作,该代码块标记为 不安全并使用/ unsafe编译器选项进行编译。

固定语句被用来告诉垃圾收集器别碰与固定声明

unsafe 
    { 
     fixed (int* a = &b) // tells garbage collector not touch 
     { 
     *a = 9; 
     }  
    } 
+0

对啊,这真的很有帮助,谢谢。 +1 –