Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序域隔离 “应用程序域提供的隔离具有以下好处:_C#_.net_Clr - Fatal编程技术网

C# 应用程序域隔离 “应用程序域提供的隔离具有以下好处:

C# 应用程序域隔离 “应用程序域提供的隔离具有以下好处:,c#,.net,clr,C#,.net,Clr,一个应用程序中的故障不会影响其他应用程序。由于类型安全代码不会导致内存故障,因此使用应用程序域可确保在一个域中运行的代码不会影响进程中的其他应用程序。”## 以上文字来自MSDN 我的问题是, 句子中的“错误”指的是例外,还是其他什么 2、“一个应用程序中的故障不会影响其他应用程序”是什么意思?, 这是否意味着如果在一个应用程序域中抛出异常,该异常将不会使其他应用程序域崩溃,对吗? 你能给我举个例子吗 这篇文章讨论了内存隔离。托管代码不能仲裁修改内存(如果没有不安全的),这与C/C++不同,因

一个应用程序中的故障不会影响其他应用程序。由于类型安全代码不会导致内存故障,因此使用应用程序域可确保在一个域中运行的代码不会影响进程中的其他应用程序。”##

以上文字来自MSDN

我的问题是,

句子中的“错误”指的是例外,还是其他什么

2、“一个应用程序中的故障不会影响其他应用程序”是什么意思?, 这是否意味着如果在一个应用程序域中抛出异常,该异常将不会使其他应用程序域崩溃,对吗? 你能给我举个例子吗


这篇文章讨论了内存隔离。托管代码不能仲裁修改内存(如果没有
不安全的
),这与C/C++不同,因此在一个AppDomain中运行的托管代码不会损坏另一个AppDomain中的内存。即缓冲区溢出类错误由托管运行时防止,而在C/C++中易于实现,如
int-arr[4];arr[-1]=2


异常的范围不限于AppDomain(或者更确切地说,在有/没有AppDomains的情况下行为类似)-大多数异常只会影响调用抛出异常的方法的代码,有些(即StackOverflow)默认情况下会终止进程。如果未处理正常异常,通常会导致进程终止。如果堆栈上的代码与多个AppDomain绑定,则异常可以自由跨越AppDomain边界。

谢谢alexei。”“你说过“托管运行时可以防止缓冲区溢出类错误”,那么托管运行时是如何实现这种保护的呢?@jacky_shen,基本上运行时可以验证代码是否执行了它应该执行的操作。也就是说,IL足以检查代码是否读取/写入已知对象的字段,是否检查每个数组访问的边界。。。如果IL未能通过验证(即,被黑客攻击访问随机内存地址),则该代码在运行时将无法通过验证,并且不会被JIT/执行。