为什么从 C# 程序调用 C 函数不需要不安全上下文?
Why unsafe context is not required to call C functions from C# program?
我最近开始从事 C# 编程(我之前只从事 C 语言)。我开始知道我们需要使用不安全的上下文来在 C# 程序中使用指针作为 Microsoft docs page.
不使用指针的优点之一是
Using unsafe code introduces security and stability risks.
但我们不需要使用不安全的上下文来调用 C 中可能包含编写不当的代码或安全漏洞的函数。 Common Language Runtime 无法检测到这些 C 函数中的问题。
这些是我的问题
为什么即使 CLR 无法检测到这些代码中的问题,也不需要使用不安全上下文来执行用 C 编写的函数?
不使用不安全上下文调用用 C 编写的函数有什么好处?
Why it is not required to use unsafe context to execute functions written in C even though CLR can't detect problems in these code?
不安全模式与被调用的方法无关,C# 代码也可能同样不安全。不安全模式是关于被绕过的内存管理。如果您通过 CLR(如此管理)分配变量,这些变量将传递给 C++ 库,例如 Win32 库,CLR 仍然可以管理使用的内存段,因为它们仍然是 CLR 变量。
What may be the advantage of not using the unsafe context for calling functions written in C?
如果不需要不安全的内存分配,则使用 unsafe
上下文没有意义。
我最近开始从事 C# 编程(我之前只从事 C 语言)。我开始知道我们需要使用不安全的上下文来在 C# 程序中使用指针作为 Microsoft docs page.
不使用指针的优点之一是
Using unsafe code introduces security and stability risks.
但我们不需要使用不安全的上下文来调用 C 中可能包含编写不当的代码或安全漏洞的函数。 Common Language Runtime 无法检测到这些 C 函数中的问题。
这些是我的问题
为什么即使 CLR 无法检测到这些代码中的问题,也不需要使用不安全上下文来执行用 C 编写的函数?
不使用不安全上下文调用用 C 编写的函数有什么好处?
Why it is not required to use unsafe context to execute functions written in C even though CLR can't detect problems in these code?
不安全模式与被调用的方法无关,C# 代码也可能同样不安全。不安全模式是关于被绕过的内存管理。如果您通过 CLR(如此管理)分配变量,这些变量将传递给 C++ 库,例如 Win32 库,CLR 仍然可以管理使用的内存段,因为它们仍然是 CLR 变量。
What may be the advantage of not using the unsafe context for calling functions written in C?
如果不需要不安全的内存分配,则使用 unsafe
上下文没有意义。