【发布时间】:2015-05-15 10:46:14
【问题描述】:
malloc()返回的虚拟内存指针的size_t值有上限吗?
我想知道我是否可以安全地设置 64 位指针的最高有效位来指示这不是指针而是文字整数。
【问题讨论】:
-
int64_t或uint64_t有什么问题? -
这取决于
OS'内存映射策略,并且由于该策略是一个实现细节,它可以从OS的一个版本更改为下一个版本而不会发出任何警告。我不会依赖这样的黑客攻击。 -
您问题中的某些内容相当不清楚(至少对我而言)。假设您调用了
malloc,它返回了一个新分配的内存块的地址。如何更改该值的 MSB 使其“指示文字字符串”。我想你的意思是 - “有没有malloc从未返回的值,我可以安全地使用这些值来区分它们与malloc返回的值是?” .也就是说,如果您提供相关的代码片段(即返回指针的函数),这里的某人可能会建议一种干净安全的方法来实现您的目标。 -
您可以安全地执行此操作,但不是“在 C 中”:您需要完全忘记 C 的抽象语义并阅读您的 硬件 平台的指针规则(如果愿意,您可以用 C 编写代码,但这是一个细节)。 Can be done on x64.