首页 > 编程语言 >C# 一些非常用关键字

C# 一些非常用关键字

时间:2023-06-02 16:23:42浏览次数:47  
标签:非常 语句 变量 C# 指针 关键字 int fixed out

一、fixed 

1、fixed 语句禁止垃圾回收器重定位可移动的变量。fixed 语句只能出现在不安全的上下文中。Fixed 还可用于创建固定大小的缓冲区。
2、fixed 语句设置指向托管变量的指针并在 statement 执行期间“钉住”该变量。如果没有 fixed 语句,则指向可移动托管变量的指针的作用很小,因为垃圾回收可能不可预知地重定位变量。C# 编译器只允许在 fixed 语句中分配指向托管变量的指针。
3、执行完语句中的代码后,任何固定变量都被解除固定并受垃圾回收的制约。因此,不要指向 fixed 语句之外的那些变量

二、unsafe

当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。

三、stackalloc

stackalloc 关键字用于不安全的代码上下文中,以便在堆栈上分配内存块

const int arraySize = 20;
int* fib = stackalloc int[arraySize];

该块的地址存储在 fib 指针中。 此内存不受垃圾回收的制约,因此不必将其钉住(通过使用 fixed)。 内存块的生存期受限于定义它的方法的生存期。 不能在方法返回之前释放内存。

四、以上三个关键字的使用,例子:

//CAN通讯,读Bus总线上的数据
public unsafe static canStatus canRead(int handle, out int id, byte[] msg, out int dlc, out int flag, out long time) { byte* ptr = stackalloc byte[64]; int id2; uint dlc2; uint flag2; uint time2; canStatus num = CanLibDLL.canRead(handle, out id2, (IntPtr)ptr, out dlc2, out flag2, out time2); id = id2; dlc = (int)dlc2; flag = (int)flag2; time = time2; if (num == canStatus.canOK) { long sourceBytesToCopy = Math.Min(Math.Min(msg.Length, 64), dlc); fixed (byte* destination = msg) { Buffer.MemoryCopy(ptr, destination, msg.Length, sourceBytesToCopy); } } return num; }

 

标签:非常,语句,变量,C#,指针,关键字,int,fixed,out
From: https://www.cnblogs.com/zhanghongfei/p/17452132.html

相关文章

  • Python网页开发神器fac 0.2.9、fuc 0.1.29新版本更新内容介绍
    fac项目地址:https://github.com/CNFeffery/feffery-antd-componentsfuc项目地址:https://github.com/CNFeffery/feffery-utils-components欢迎star支持⭐大家好我是费老师,由我开源维护的Python网页开发相关组件库fac和fuc分别更新到了0.2.9版本和0.1.29版本,本文就将为大家......
  • SpringMVC大文件分片上传/多线程上传
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求         <formid="postForm"action="${pageContext.request.contextPath}/UploadServlet"method="post"e......
  • 二十四史中国历史中国正史ACCESS\EXCEL数据库
    普通人对中国历史的兴趣一般都是电视剧里的野史秘闻,可以用《近8万条中国历史野史秘闻ACCESS数据库》,而对于需要谨严学习的,莫过于中国正史也就是所谓的二十四史,二十四史的数据其实找了有一段时间,网络上流行的一般都是一史一个txt文件,并不利于产品开发,整理起来也挺烦人的。而今天破......
  • CF1759F
    CF1759F因为每次只对原数加\(1\),所以表示出来所有的数最多需要\(p-1\)次(一共\(p\)种数字,\(in[1]\)已经被表示出来了)对于输入数的最低位\(in[1]\),如果有比他小的数没被表示出来,那么一定存在进位(进位过程中,所有大于\(in[1]\)的数全被表示出来了,进位后\(in[1]\)变为......
  • Oracle:OpenEuler 22.03 安装oracle12c:个人认为这是最完美的解决方案
    最小化安装openeuler-22.03-sp1,并更新到最新(写本文时:2023-06-01)关闭selinux关闭firewalld.service创建用户及用户组:oracle:oinstall创建推荐的目录:/u01,属主oracle:oinstallyuminstalllibnsllibnsl2-devellibaio-devellibcap-develxorg-x11-utilsxauthgccmakelibst......
  • 如果还不懂如何使用 Consumer 接口,来青岛我当面给你讲!
    背景没错,我还在做XXXX项目,还在与第三方对接接口,不同的是这次是对自己业务逻辑的处理。在开发过程中我遇到这么一个问题:表结构:一张主表A,一张关联表B,表A中存储着表B记录的状态。场景:第一步创建主表数据,插入A表;第二步调用第三方接口插入B表同时更新A表的状态。此时大家应该都......
  • ubuntu 安装chrome
    chrome官网上不去,国内的下载镜像里也没有找到Linux版的chrome,怎么办呢?网上逛了逛,发现网友实验出chrome下载的地址是可用的,见如下:https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb我们要做的就是静静的等待它下载完成:$wgethttps://dl.google.com......
  • 还在用BeanUtils拷贝对象?MapStruct才是王者!【附源码】
    前几天,远在北京的小伙伴在群里抛出了“MapStruct”的概念。对于只闻其名,未见其人的我来说,决定对其研究一番。本文我们就从MapStruct的概念出发,通过具体的代码示例来研究它的使用情况,最后与“市面上”的其它工具来做个对比!官方介绍首先我们打开MapStruct的官网地址,映入眼帘的就......
  • 数据隐私为先:EMQX Cloud BYOC 架构解析
    随着物联网的飞速发展,保护数据隐私和安全变得愈发重要。构建一个安全、可靠、可扩展的物联网基础设施成为企业的首要任务。EMQ近期推出了EMQXCloudBYOC,采用了以数据隐私为先的架构,为解决这些问题提供了一个理想的方案。用户可以在自己的云环境中部署MQTT集群,完全掌控自己的......
  • Github PR 时合并多次提交的 git commits All In One
    使用场景:(一个组里的兄弟)在一个分支里,提交多次,产生多个commit,然后提pr。正常情况下,合并到main分支,也会带着多次pr。期望:将分支中多个commit在合并至main时变为一个commit 解决办法: https://www.cnblogs.com/xgqfrms/p/16464515.html   终极解决办法(原理):  htt......