c#在默认情况下生成的都是安全代码,即进行了代码托管(.NET的CLR机制好处之一是 ,进行代码托管,适时的释放内存,程序员便不必考虑资源的回收问题),而此时,指针不能出现在安全代码的编译条件下。 一、unsafe 如果因需要想在c#中使用指针,那么unsafe便是一个通道(当然在使用前,需在项目属性的生成选项中,选择“允许不安全代码”)。 example 1: a) 创建项目,项目属性->生成->选择“允许不安全代码” b) 编写代码 上面代码简单的示范了何种情况下可以使用指针。 二、fixed fixed其实是在非安全代码下用到才会有意义的。因为他负责对指针所指向的“动态分配内存的对象或对象中的成员”简称“对象”进行锁定(之所以要锁定,是因为即使在非安全代码模式下,这些对象一样的使用CLR的代码托管,这样的话,很可能造成对象的地址变动,就是因为CLR对资源重新分配的不确定性,假使指针在未完成对对象的操作时,对象地址变动,那么指针指向的地址就会出现混乱,很可能造成内存泄漏甚至系统崩溃。如果使用fixed进行锁定,那么只有在执行完fixed模块后,指针所指向的对象才能被移动)。 example 2: 上述代码需注意的是:pa的地址也是被固定了的,所以不能对他进行赋值操作。
UnSafe & Fixed
最新推荐文章于 2025-08-09 14:57:28 发布
本文介绍了在 C# 中如何使用 unsafe 关键字来启用指针支持,并通过示例展示了如何在非安全代码块中使用指针进行数学运算。此外,还详细解释了 fixed 关键字的作用,即锁定指针所指向的对象,防止垃圾回收机制移动这些对象导致的潜在问题。
3467

被折叠的 条评论
为什么被折叠?



