闽公网安备 35020302035485号
3.做极致性能优化(比如游戏引擎、高频交易)
using System;
classProgram
{
unsafe static void Main()
{
int[] numbers = { 10, 20, 30, 40, 50 };
// 堆代码 duidaima.com
fixed (int* ptr = numbers) // 把数组钉住
{
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(ptr[i]); // 指针安全有效
}
} // 出了这个花括号,GC 又可以自由移动数组了
}
}
✅ 没 fixed? GC 可能在你读 ptr[3] 时把数组挪走 → 程序崩溃public unsafe static void ModifyArray()
{
int[] numbers = { 1, 2, 3, 4, 5 };
fixed (int* ptr = numbers)
{
for (int i = 0; i < numbers.Length; i++)
{
ptr[i] *= 10; // 直接改内存,不经过 C# 属性/方法
}
}
foreach (var n in numbers)
{
Console.WriteLine(n); // 输出:10, 20, 30, 40, 50
}
}
这种操作在高性能场景很常见:3.网络协议解析(直接读写 buffer)
作用域要短:fixed 块越小越好,别一钉就是几百行
✅ 推荐使用场景:3.与硬件/驱动交互
🚫 替代方案(更安全):3.用 MemoryMarshal 做安全的指针转换