【发布时间】:2015-06-17 08:15:38
【问题描述】:
在linux中,用户空间的虚拟内存地址范围,也就是malloc返回的值的范围,和整个64位虚拟内存空间一样吗? 或者,是否有任何 64 位虚拟内存空间的子范围可以保证在用户空间中看不到?
欢迎回答UNIX系统或Windows系统。
当然,我不打算在某些产品中引入这样的错误代码。 我只是想象如果有空闲空间,我们可以使用该空间来存储flgas,例如用于惰性构造的is_constructed标志,并且可以节省很多空间。通常,即使我们只使用 1bit,也需要 1byte(堆栈)分配。此外,这种将值编码到内存地址中可能会导致错误的内存预取或分支错误预测。然后,我想检查节省内存带宽和 CPU 误预测哪个更大。
【问题讨论】:
-
你应该解释你问的原因。
-
即使有你的解释,我也不明白它与问题的关系。
-
如果保证虚拟内存地址的高n位不使用,我们可以在指针的这n位中写入数据。
-
没有高n位应该全0或全1。