指针是否保证>某个值?

5 c++ memory ram pointers new-operator

在C++中,当我这样做new(甚至是malloc)时,是否可以保证返回地址大于某个值?因为......在这个项目中,我发现使用0-1k作为枚举是非常有用的.但如果有可能获得低价值,我不想这样做.我唯一的目标系统是带有OS窗口/ linux和mac的32或64位CPU.

标准是否对指针有所说明?Windows或Linux是否会说出他们的C运行时以及最低内存地址(对于ram)是什么?

-edit-我最终修改我的new重载以检查地址是否高于> 1k.如果没有,我调用std :: terminate.

Nec*_*lis 6

在标准方面,没有什么.但实际上,它取决于目标操作系统,例如windows保留了第一个64kb的内存作为无人区域(取决于构建它是只读内存,否则它标记为PAGE_NOACCESS),而它使用内核内存上为0x80000000 +,但它是可以改变的,看到这个这个 MSDN上.

在x64上你也可以使用地址的高位(目前只有47位用于地址),但它不是一个好主意,因为后来它会改变你的程序会破坏(设置标准的AMD也建议反对它).


xxb*_*bcc 4

没有这样的保证。如果您需要非常具体的内存位置,您可以尝试使用放置new,但它存在某些您必须努力避免的问题。为什么不尝试使用带有整数键且以指针作为值的映射呢?这样您就不必依赖特定的内存地址和范围。