struct A { int i; };
...
A *p = (A*) (8); // or A *p = 0;
p->i = 5; // Undefined Behavior according C/C++ standard
然而,实际上大部分的系统会崩溃(分段错误)这样的代码。指针间接支票无效的内存访问和分割故障
这是否意味着所有这样的架构/系统都对隐式指针间接检查(即p->
)验证它是否访问错误的内存位置?
如果是的话,那么就意味着,即使在完美工作代码我们支付的价格为额外的检查,是否正确?
看起来很奇怪,你的答案显然是“不”,但你从“是”开始。您不需要额外的有效性检查,它需要实现虚拟内存。 – 2012-01-14 06:21:20
@DavidSchwartz:我认为页面权限检查是虚拟内存的一部分,所以是的,由于虚拟内存有成本,所以检查费用很高。你不必同意这一点,但你不必争论语义。 – 2012-01-14 06:39:44
他问工作代码是否支付导致无效代码出错的*额外*有效性检查的费用。它不是。额外的有效性检查没有成本,因为没有额外的有效性检查。有效性检查不是作为额外的检查来实现的,而是为了使有效的代码有效而需要进行的部分检查。这不仅仅是一个语义问题,一个没有仔细阅读你的答案并批判性地结束与真相相反的印象的人。 – 2012-01-14 06:41:42