【发布时间】:2014-07-08 16:47:16
【问题描述】:
在 C 语言中,是否可以使用 this one 之类的方法将 -1 值(例如 0xFFFFFFFF)填充到指针中,并期望在运行时永远不会分配这样的内存地址?
这个想法是将指针值用作内存地址,除非它具有这个“特殊”-1 值。指针即使是 NULL 也应该被认为是内存地址(在这种情况下,它指向的对象还没有被构建)。
我了解这可能与平台有关,但相关程序预计可在 Linux、Windows 和 MacOSX 中运行。
手头的问题比这里描述的要大得多,所以 cmets 或回答这个方法没有用的问题。我知道这有点 hacky,但替代方案是一个主要的重构:/
提前致谢。
【问题讨论】:
-
其实我不确定我是否得到你的问题。基本上 NULL 是等于地址的地址。那么为什么不只使用NULL呢?更不用说它在某些平台上的值可能为 0xFFFFFFFF。
-
你为什么不分配一个静态哨兵变量,而不是写任何东西给它,而是保留一个地址?您可以确定没有任何有效地址与此哨兵的地址一致。
-
+1 帕斯卡·库克。也可以将任何函数的地址(例如,
main)作为标记。 -
@faken 据我所知,
&sentinel是一个“常量表达式”(在 C99 6.6 的意义上),可以在初始化程序中使用。为什么需要任何代码? -
这就是 sqlite 的作用:sqlite.org/c3ref/c_static.html