C#通过unsafe来操作指针
这里不介绍unsafe的理论,这里单单介绍它的用法。如果要了解的更具体,可以看这篇大神的博文:C#通过指针操作图像
先从一个很简单的例子介绍:
private void TestInptr()
{
unsafe
{
byte a = 100;
byte* p = &a;
p = &a;
Console.WriteLine("修改前a=" + *p);
a = 200;//修改后再输出
Console.WriteLine("修改后a=" + *p);
(*p)++;//通过指针修改a
Console.WriteLine("Value:" + *p);
}
}
修改前a=100
修改后a=200
Value:201
操作字节数组
private unsafe void TestInptr2(byte[] bufferB)
{
Stopwatch sw = new Stopwatch();
sw.Start();
fixed (byte* p = bufferB)//指向托管变量的指针需要放在fixed里面,bufferB存放在堆中
{
for (int i = 0; i < bufferB.Length; i++)
{
*(p + i) = 200;
}
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
}
如果是修改大小为2592*1944大小的字节数组,需要30ms的时间。
C#通过unsafe来操作指针的更多相关文章
- C#操作指针
如何:递增和递减指针 使用增量和减量运算符 ++ 和 -- 可以将 pointer-type* 类型的指针的位置改变 sizeof (pointer-type). 增量和减量表达式的形式如下: ++p ...
- QT编写上位机程序一定要初始化变量以及谨慎操作指针
背景: 在编写QT上位机界面时,界面在运行的时候经常出现卡死或者直接挂掉的怪现象. 正文: 上位机有个函数为check_receive():该函数的作用为定时调用循环检测USB是否有数据.若有,则将信 ...
- Java堆外内存之四:直接使用Unsafe类操作堆外内存
在nio以前,是没有光明正大的做法的,有一个work around的办法是直接访问Unsafe类.如果你使用Eclipse,默认是不允许访问sun.misc下面的类的,你需要稍微修改一下,给Type ...
- 12.Unsafe原子性操作
import sun.misc.Unsafe; /** * JDK8 * JDK 的此jar 包中的 Unsafe 类提供了硬件级别的原子性操作 */ public class UnsafeTest ...
- 【通过操作指针,与指针做函数參数'实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换
】
#include<stdio.h> #include<stdlib.h> int strTime(const char *str1, const char *str2, int ...
- Java使用Unsafe接口操作数组Demo
public class unSafeArrayDemo { private static final sun.misc.Unsafe UNSAFE; private static final lon ...
- Golang指针与unsafe
前言 我们知道在golang中是存在指针这个概念的.对于指针很多人有点忌惮(可能是因为之前学习过C语言),因为它会导致很多异常的问题.但是很多人学习之后发现,golang中的指针很简单,没有C那么复杂 ...
- C#使用不安全指针来操作bitmap
C#允许通过不安全指针实现像C++一样操作指针,这个速度是最快的.下面这个例子是修改一幅RGB图像的每个像素值,速度很快,测试一张2592*1944的彩色图像,只需要几ms就能够全部遍历. /// & ...
- foreach next 操作数组指针移动问题
2018年10月20日10:39:40 先说结论,foreach 维护的是一套属于自己的数组指针 会在操作数据的时候,分裂一套变量地址,即使你强制使用 & 取地址一样会分裂,不会引用同一套指针 ...
随机推荐
- Swift中的Result 类型的简单介绍
Swift 5引入了一个新的Result类型, 它使用枚举来处理异步函数的结果. 苹果文档对该类型的描述: A value that represents either a success or a ...
- KingbaseES V8R6集群维护案例之---停用集群node_export进程
案例说明: 在KingbaseES V8R6集群启动时,会启动node_exporter进程,此进程主要用于向kmonitor监控服务输出节点状态信息.在系统安全漏洞扫描中,提示出现以下安全漏洞: 对 ...
- kingbaseES R6 读写分离集群修改ssh端口案例
数据库环境: test=# select version(); version ------------------------------------------------------------ ...
- Zookeeper+dubbo+Springboot集成总结
1. 尽量用XML 集成,这也的Dubbo官方推荐的集成方式 自己在使用注解集成过程中发现有坑:Springmvc包扫描和dubbo包扫描冲突,导致消费端一直拿不到代理对象(null),非常蛋疼,所以 ...
- K8S Ingress使用|常见问题列表
官方文档地址:https://kubernetes.github.io/ingress-nginx/
- Elasticsearch:mapping定制
- Grafana 入门知识介绍
通过[Configuration]>[Plugins]添加插件 通过[Configuration]>[Data Sources]添加数据源(分析对象) 通过[Server Admin]&g ...
- 05_Java基础知识
Java基础知识 一. Java的语言特点 面向对象(贴近人类思维模式,模拟现实世界,解决现实问题) 简单性(自动内存管理机制,不易造成内存溢出:简化流程处理.语义清晰) 跨平台(操作系统.服务器.数 ...
- 用户输入学号,如果是以aabcddef开头,并且后边是4位数字,前两位大于06小于等于当前年份。判断用户输入是否合法
package seven_topic; import java.util.*; public class p_19_1 { public static void main(String[] args ...
- Oh My Life~
作者:HChan 链接:https://zhuanlan.zhihu.com/p/47084162 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Part 1 那年 ...