在循环内部或外部使用不安全有什么区别?
过去我从来不需要使用不安全的,但是现在我需要它来处理一个位图的指针。
我找不到任何其他文档,但我想更好地了解不安全的作品,以及如果它在循环内部或外部使用它有什么区别。
这样做更好吗?
unsafe { for (int x = 0; x < maxX; x++) { for (int y = 0; y < maxY; y++) { //Unsafe pointer operations here. } } }
还是要做?
for (int x = 0; x < maxX; x++) { for (int y = 0; y < maxY; y++) { unsafe { //Unsafe pointer operations here. } } }
unsafe
关键字是用来告诉编译器你知道自己在做什么的标记。 它的主要目的类似于logging你的代码: unsafe
块显示你指定为非托pipe领域的部分代码; 对代码的实际执行没有影响。
考虑到这一点,尽可能减less这个不安全领域的规模是有意义的,这意味着你的第二种方法比第一种更好。
值得一提的是,另外两个替代scheme,即标记方法和标记unsafe
的类,也不如在不安全块放置在代码最小可能部分周围的方法。
unsafe
更改编译器将接受并产生输出的expression式。 它本身并没有运行时开销。 对于任何不需要unsafe
expression式,编译器会发出相同的代码,而不unsafe
是否在unsafe
上下文中。
对于只能在unsafe
上下文中使用expression式的细节,我build议参考C#语言规范的第18节