为什么不需要从C#程序调用C函数的不安全上下文?

时间:2018-05-10 10:09:14

标签: c# clr unsafe

我最近开始从事C#编程(之前我只在C上工作)。我开始知道我们需要使用不安全的上下文将C#程序中的指针用作Microsoft docs page

不使用指针的一个优点是

  

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

但我们不需要使用不安全的上下文来调用C中的函数,这些函数可能包含编写糟糕的代码或安全漏洞。 Common Language Runtime无法检测这些C函数中的问题。

这些是我的问题

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

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

1 个答案:

答案 0 :(得分:4)

  

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

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

  

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

如果您不需要不安全的内存分配,则使用const express = require('express'); var app = express(); [...] var allowCrossDomain = function (req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type,Authorization,refreshToken'); next(); }; [...] app.use(allowCrossDomain); 上下文毫无意义。