pointers - 空指针定义在计算机的哪一层?

标签 pointers null nullpointerexception low-level

原始计算机基本上只有物理地址从 0 开始的内存,对吗?然后有人可以编写汇编代码(例如 BIOS)并将值实际设置为 0。

现在,如果有启动计算机的 BIOS,那么有人可以为操作系统编写加载程序。那个人可以决定用汇编语言将实际值移动到内存中的位置 0 吗?

如果他们使用 C 或 C++ 呢?他们可以有一个值为 0 的指针并使用它来访问第一个内存位置吗?这是否需要经过特殊调整的编译器?

然后操作系统进入现场。它有一个由 malloc 调用的内存管理器。以获得更多内存。是否可以编写一个操作系统,它可以简单地将空指针用作普通指针,但在其他方面的行为与 Linux 完全一样,然后如果有人使用普通的、未修改的 GCC 编译 C 程序,空指针就不会导致分段过错?

最佳答案

而 NULL 指针在 C 源代码中表示为 0 ,并不要求底层位模式实际上必须为 0。它只需要与非 NULL 指针区分开即可。有一些架构的例子在幕后不是零。

C 实现本身决定了 NULL 是什么。

您还应该意识到现代操作系统(好吧,那些使用虚拟内存的操作系统)在进程虚拟地址空间和底层物理内存之间存在脱节。

关于pointers - 空指针定义在计算机的哪一层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5283113/

相关文章:

java - 按钮的新 setText 属性无缘无故出现空指针异常

c - 使用指针访问带有数组的两个结构

当我引用双指针时,代码不起作用

具有空白/空值的 MySQL JOIN 不返回任何结果

php - "Bad"练习乘以$val * 1 将null 转换为零

java - 将监听器分配给类时遇到问题

c++ - 数组和指针

c - 这段 C 代码是如何工作的?

java - 将 null 放在列表的末尾

java - 可编辑的二维数组