unsafe static void SquarePtrParam (int* p)
{
*p *= *p;
}
Run Code Online (Sandbox Code Playgroud)
VS
static void SquarePtrParam (ref int p)
{
p *= p;
}
Run Code Online (Sandbox Code Playgroud)
Gab*_*abe 10
安全代码可以在任何可以运行C#代码(Silverlight,共享托管ASP.NET,XNA,SQL Server等)的情况下运行,而不安全的代码需要提升信任.这意味着您可以在更多地方运行代码,并且限制更少.
此外,它是安全的,这意味着您不必担心做错事和崩溃您的过程.
您的示例不是很好,JIT编译器已经生成了类似的代码.在引擎盖下引用也是指针.这需要快速,托管代码永远不会有竞争力.
垃圾收集堆与指针非常不兼容,您必须固定对象才能创建指向它们的指针.如果没有固定,垃圾收集器可能会移动对象,并且您的代码会随机失败,从而破坏堆的完整性.固定操作和效率损失都是非零成本,在取消固定后,当固定对象时发生垃圾收集时.
在访问非托管内存时,指针非常有效.规范示例是需要访问位图像素的图像处理.这是一种快速访问固定数组并删除所有安全联锁的方法,当您不迭代它们时,数组索引检查不是免费的.
使用不安全代码的原因只有一个:原始性能.
使用不安全的代码,您可以像指针一样使用C++,而无需经过运行时检查.没有检查意味着你自己,但开销较少.
我只是在加速图像/位图操作时才看到它.但是你也可以用它来进行内联字符串操作(是的,使字符串变得可变!!!不管怎么说,除非你想构建StringBuilder).其他用法包括矩阵计算或其他重数学.并且可能与操作系统接口,以及一些黑客攻击.
| 归档时间: |
|
| 查看次数: |
4900 次 |
| 最近记录: |