如何表示指向地址空间开头的指针
How do I represent a pointer to the beginning of my address space?
让我们考虑一些奇怪的假设嵌入式系统,我需要生成和使用指向或可能指向地址空间第一个字节的指针。也就是说,指针等于零。不是 NULL 指针,而是完全有效的零指针,它可能会被取消引用或递增或被视为数组,就像任何其他指针一样。在将 NULL 指针视为特殊但没有真正的 NULL 类型的语言中,我将如何执行此操作?
在某些罕见的旧机器上,整个"具有不同于 0 处理的特殊值的 NULL 指针"是可能的,但实际上,指向地址 0 的 NULL/0 指针将具有值 0,并且在大多数机器上实际上指向地址 0。
它将是完全可取消引用的,如果有一些内存映射到该区域,您可以在该地址上写入。
我曾经在我使用的嵌入式平台上使用它。所以我曾经在地址 0 上放置一个调试器观察点,因为对该区域的所有访问都是 NULL 指针取消引用。以这种方式捕获了一些错误^^
在大多数体系结构中,NULL 指针根本没有什么特别之处,它只是一个地址为 0 的常规指针。如果您正在使用具有实际内存的嵌入式系统,它应该可以正常工作。如果您尝试检查指针是否为 null 值,则会出现唯一的问题,因此不要这样做。
如果有帮助,寄存器定义(指向特定地址的指针)将(在我的CodeWarrior副本中)写为:
#define REGISTER_XYZ (*(vuint32 *)(0x40100000))
请注意 vuint,因为它是一个不稳定的位置(可能会在我们的控制范围之外发生变化),可能与您相关,也可能与您无关。
并将0x40100000替换为您选择的地址natch。
相关文章:
- C++/地址空间:每个地址 2 个字节?
- 任务管理器 - C/C++ 应用程序 - 分配的地址空间与已用内存
- size_t ptrdiff_t和地址空间
- C++中是否有一个函数可以为您获取指向该节点的所有指针的地址空间
- ptrA = ptrB 是否等同于 ptrA = &*ptrB?,空值是否共享一个地址空间?
- 优化大型地址空间上的循环
- 如何表示指向地址空间开头的指针
- 从某个特定但很大的虚拟地址空间(例如,20GB以上)分配内存
- Do C和C++标准意味着地址空间中必须只存在一个特殊值来表示空指针的值
- 使用mprotect保护整个地址空间
- 关于取消引用和地址空间的基本C++指针问题
- 进程如何访问不属于其虚拟地址空间的内存映射 IO 地址?
- 在虚拟地址空间中使用内存映射文件
- 由 shmat 返回的指针位于地址空间的末尾,这给出了 SEG 错误
- 与地址空间无关的对象表示
- 以何种形式,可以通过管道将空指针发送到不同进程地址空间中的另一个进程
- 窗口中的虚拟地址空间
- 在Clang中使用指向成员和地址空间的指针
- 更新进程地址空间中的HTML内容
- 如何判断共享库在进程地址空间中的加载位置