c++ - 指针间接检查无效内存访问和段错误

标签 c++ c operating-system segmentation-fault internals

struct A { int i; };
...
A *p = (A*) (8); // or A *p = 0;
p->i = 5;    // Undefined Behavior according C/C++ standard

但是,实际上大多数系统会因此类代码而崩溃(段错误)

这是否意味着所有此类架构/系统都对指针间接(即 p->)进行隐藏检查以验证它是否正在访问错误的内存位置?

如果是,那么这意味着即使在完美工作的代码中,我们也要为那个额外检查付出代价,对吗?

最佳答案

一般不会有额外的隐藏检查,这只是使用虚拟内存的一个效果。

一些潜在的虚拟地址只是没有映射到物理内存,所以翻译像 8 这样的东西可能会失败。

关于c++ - 指针间接检查无效内存访问和段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860340/

相关文章:

c++ - 跟踪我程序中的所有函数

c++ - 在 C++ 中作为参数发送的数组清零

c++ - 如何获取 GDI 句柄列表

c++ - msvc + GNU 制作

c - 如何在旧台式计算机上构建小型操作系统?

c++ - 如何为 C++ 函数定义属性别名?

c - 为什么在编程中使用常量?

c - 在纯 C 中解析 XML

c - printf()函数的实现

operating-system - 消息队列和邮箱的区别