gpt4 book ai didi

c - 在指针中填充 -1 作为特殊值

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:21 26 4
gpt4 key购买 nike

在 C 中,可以使用诸如 this one 之类的方法将 -1 值(例如 0xFFFFFFFF)填充到指针中吗? ,并期望这样的内存地址永远不会在运行时分配?

想法是指针值被用作内存地址,除非它具有这个“特殊”-1 值。指针应被视为内存地址,即使它为 NULL(在这种情况下,它指向的对象尚未构建)。

我知道这可能取决于平台,但该程序预计可在 Linux、Windows 和 MacOSX 中运行。

手头的问题比这里描述的要大得多,所以评论或回答问题这种方法是没有用的。我知道这有点 hacky,但替代方案是主要重构:/

提前致谢。

最佳答案

它是 GRAS(公认安全的)。没有主要的操作系统会分配会与您选择的哨兵发生冲突的内存。然而,有一些病理情况下做出这种假设是无效的。例如,病态的 C++ 编译器可能会选择从 0xFFFFFFFF 开始堆栈,而不会违反规范中的任何约束。

仅在健全的操作系统范围内,几乎不可能将 0xFFFFFFFF(或其 64 位等效项)作为有效的内存地址。它不能是数组的有效内存地址(C++ 规则禁止它)。从技术上讲,它可以是在空间末尾分配的对象的 char 的有效索引,但有两件事阻止了这种情况。

  1. 大多数操作系统都有一些填充
  2. 大多数操作系统使用高内存值作为内核内存。

如果你有机会使用全局值作为哨兵,它保证是安全的。

char sentinel;

char* p = "Hello";
char* p2 = 0; // null pointer
char* p3 = &sentinel;

if (p3 == &sentinel)
cout << "p3 was a sentinel" << endl;

关于c - 在指针中填充 -1 作为特殊值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com