c# 使用指针间介
来源:互联网 发布:vscode 自动补全 编辑:程序博客网 时间:2024/05/21 13:44
最近在做将Fortran语言移植到C#.net中的工作,由于Fortran是一个用来科学计算的语言,其中大量使用了数组且其操作绝大多数都是对数组的读写操作。而熟悉.net框架的人都知道,当我们访问数组中的元素时,CLR会先检查索引是否超出了数组的上下界,若超出了,则会抛出System.IndexOutOfRangeException异常。而正是由于这层“保姆程序”,使得.NET程序中对数组操作时无可避免地会有一些性能方面的代价。我们今天要做的事情就是直接跳过这层“保姆程序”,使用指针直接对数组中的元素进行操作。
为了在程序中使用指针,我们需要标示非安全代码,需要使用特殊的关键字unsafe。
非安全代码是一种介于托管代码和非托管代码之间的一种代码类型,它能像托管代码一样在CLR的管理下执行,又能像非托管代码一样允许你使用指针直接操作内存。具体来说,凡是使用了*、&、->这些C语言中常用到的任一指针操作符的语句、语句块或函数都称为非安全代码。
实例如下:
unsafe void SquarePtrParam(int* p) { *p *= *p; }
由于CLR管理下的代码中存在内存重定位的问题,所以为了避免内存泄露,我们需要在语句块前输入关键字fixed(其功能就是禁止垃圾回收器重定位可移动的变量),告诉CLR该语句块中的对象或变量不能重定位。
具体的实现过程如下:
在开发环境中设置编译器选项:打开项目的“属性”页——>单击“生成”页——>选中“允许不安全代码”复选框
可行实例代码如下:
public class QuikeArrayRead { unsafe void SquarePtrParam(int* p) { *p *= *p; } public unsafe void run() { int[] arr = new int[] { 1, 2, 3, 4, 5 }; fixed (int* p = &arr[0]) { for (int i = 0, n = arr.Length; i < n; i++) { SquarePtrParam(p+i); Console.WriteLine(p[i]); } } } }
- c# 使用指针间介
- C# 使用指针
- C#中使用指针
- C#指针使用
- C#中使用指针
- c#中指针的使用
- c#中使用数组指针
- 在c#中使用指针
- 在c#中使用指针
- C#指针使用学习总结
- C#指针*的使用(使用指针复制字节数组)---02
- C#指针*的使用(使用指针复制字节数组)---02
- [老文章转载]C#中使用指针
- c# 中使用不安全代码操作指针
- C#中对象指针的使用
- c#使用指针快速操作图片
- C#使用指针的代码例程
- c#指针(unsafe与fixed的使用)
- 什么是NAPI
- U盘安装Windows
- UVA 11198 Dancing Digits
- 看清接收网络数据包的全过程
- 2012年北约自主招生的一道数学好题
- c# 使用指针间介
- zoj1438-Asteroids!
- mysql中limit的用法详解[数据分页常用]
- Java集合框架面试问题集锦
- INFO: Illegal access: this web application instance has been stopped already. Could not load oracle
- Java SE基础部分-02.标识符、数据类型
- SSE2实现HAAR小波变换(dwt2与idwt2)
- ajax实例2
- Java SE基础部分-03. 运算符和表达式