首页 > 解决方案 > 为什么从 C# 程序调用 C 函数不需要不安全的上下文?

问题描述

我最近开始研究 C# 编程(我之前只研究过 C)。我开始知道我们需要使用不安全的上下文来将 C# 程序中的指针用作Microsoft 文档页面

不使用指针的优点之一是

使用不安全的代码会带来安全和稳定性风险。

但是我们不需要使用不安全的上下文来调用 C 中可能包含编写不佳的代码或安全漏洞的函数。公共语言运行时无法检测这些 C 函数中的问题。

这些是我的问题

  1. 为什么即使 CLR 无法检测到这些代码中的问题,也不需要使用不安全的上下文来执行用 C 编写的函数?

  2. 不使用不安全上下文来调用用 C 编写的函数可能有什么好处?

标签: c#clrunsafe

解决方案


为什么即使 CLR 无法检测到这些代码中的问题,也不需要使用不安全的上下文来执行用 C 编写的函数?

不安全模式与被调用的方法无关,C# 代码同样不安全。不安全模式是关于被绕过的内存管理。如果您通过传递给 C++ 库(如 Win32 库)的 CLR(如此管理)分配变量,则 CLR 仍然可以管理使用的内存段,因为它们仍然是 CLR 变量。

不使用不安全上下文来调用用 C 编写的函数可能有什么好处?

如果您不需要不安全的内存分配,那么使用unsafe上下文是没有意义的。


推荐阅读