除了代码本身可以直接访问内存之外。使用“/unsafe”编译器标志和“fixed”关键字的其他含义是什么?是否有与我的 .exe 的代码签名和部署相关的影响(我的应用程序仅适用于桌面)?
(这不是关于我是否应该这样做,为什么我的问题在这里)
您可以将含义分为两个桶。
首先是它如何影响您的应用程序环境。使用不安全代码要求您的程序集在完全信任的环境中运行。无法在受限环境中运行,例如某些 Click Once 安全设置。原因是不安全的代码会阻止 CLR 确保类型安全。尽管没有安全限制,但单击一次应该不会有问题。
第二个是它对你编码方式的意义。使用不安全代码通常涉及使用指针,特别是使用指针通过 PInvoke 执行高级编组。但是,这些行为中的任何一个都没有本质上的错误。与“安全”代码相比,它只需要对 CLR 和编组有更多的了解。对象固定是您在开始使用这些功能之前需要牢牢掌握的知识的一个很好的例子。
不安全的代码是不可验证的,所以你必须意识到这一点。在完全信任环境中,这没什么大不了的,但如果您有其他环境具有更受限制的权限集,那么这可能会影响您。
要添加到 Jared 对对象固定的引用...
在 C# 中使用指针直接访问内存时,您很容易受到 CLR 在运行时在内存中移动对象的攻击。这意味着您的指针可能会突然指向错误的内存部分。Fixed关键字会将对象固定在内存中,从而可以避免此问题。