如何表示指向地址空间开头的指针

How do I represent a pointer to the beginning of my address space?

本文关键字:地址空间 开头 指针 何表示 表示      更新时间:2023-10-16

让我们考虑一些奇怪的假设嵌入式系统,我需要生成和使用指向或可能指向地址空间第一个字节的指针。也就是说,指针等于零。不是 NULL 指针,而是完全有效的零指针,它可能会被取消引用或递增或被视为数组,就像任何其他指针一样。在将 NULL 指针视为特殊但没有真正的 NULL 类型的语言中,我将如何执行此操作?

在某些罕见的旧机器上,整个"具有不同于 0 处理的特殊值的 NULL 指针"是可能的,但实际上,指向地址 0 的 NULL/0 指针将具有值 0,并且在大多数机器上实际上指向地址 0。

它将是完全可取消引用的,如果有一些内存映射到该区域,您可以在该地址上写入。

曾经在我使用的嵌入式平台上使用它。所以我曾经在地址 0 上放置一个调试器观察点,因为对该区域的所有访问都是 NULL 指针取消引用。以这种方式捕获了一些错误^^

在大多数体系结构中,NULL 指针根本没有什么特别之处,它只是一个地址为 0 的常规指针。如果您正在使用具有实际内存的嵌入式系统,它应该可以正常工作。如果您尝试检查指针是否为 null 值,则会出现唯一的问题,因此不要这样做。

如果有帮助,寄存器定义(指向特定地址的指针)将(在我的CodeWarrior副本中)写为:

#define REGISTER_XYZ      (*(vuint32 *)(0x40100000))

请注意 vuint,因为它是一个不稳定的位置(可能会在我们的控制范围之外发生变化),可能与您相关,也可能与您无关。

并将0x40100000替换为您选择的地址natch。