C++ 在C++;64位环境中,是否存在新运算符的结果指针使用全部8个字节的情况?
我使用Windows10OS Pc和内置环境调试x64模式。我使用了VisualStudio2019 示例代码C++ 在C++;64位环境中,是否存在新运算符的结果指针使用全部8个字节的情况?,c++,pointers,new-operator,C++,Pointers,New Operator,我使用Windows10OS Pc和内置环境调试x64模式。我使用了VisualStudio2019 示例代码 int * d = new int; -记忆- &d is 30 45 0f 2f 12 02 00 00 实际上,在这种情况下,似乎不使用上面的2个字节 是否有一个案例可用于此部分 我正试图在这个空空间(2字节)中放入内存使用计数 在C++ 64位环境中,是否存在新操作符的结果指针使用所有8字节?< /p>的情况。 对于所有64位CPU体系结构,都不能保证指针的某些字节
int * d = new int;
-记忆-
&d is 30 45 0f 2f 12 02 00 00
实际上,在这种情况下,似乎不使用上面的2个字节
是否有一个案例可用于此部分
我正试图在这个空空间(2字节)中放入内存使用计数
<>在C++ 64位环境中,是否存在新操作符的结果指针使用所有8字节?< /p>的情况。
对于所有64位CPU体系结构,都不能保证指针的某些字节不会被使用
在x86-64体系结构的最新实现中,虚拟地址的高16位必须是前一个最高位的副本,地址空间只剩下48位。该规范允许在将来将其扩展到完整的64位(256 TB应该对任何人都足够了……对吧?)
利用CPU架构中“未使用”字节的能力取决于语言实现(操作系统、编译器、消毒剂等)是否已经使用它们
我正试图在这个空空间(2字节)中放入内存使用计数
只要您知道指针的高位字节会限制您的程序对其他操作系统和CPU的可移植性,就可以使用指针的高位字节。考虑一下你是否关心你的程序在10年内仍然有效。
但是,在通过x86-64上的指针进行间接定向之前,必须小心还原高位,即使它们“未使用”(请参见上面的原因)
<>在C++ 64位环境中,是否存在新操作符的结果指针使用所有8字节?< /p>的情况。
:
虚拟地址空间
进程可用的虚拟地址范围称为进程的虚拟地址空间。每个用户模式进程都有自己的私有虚拟地址空间。对于32位进程,虚拟地址空间通常为2 GB的范围0x00000000到0x7FFFFFFF。对于64位Windows上的64位进程,虚拟地址空间是128 TB的范围0x000'00000000到0x7FFF'FFFFFF
从2020年11月2日(链接中指定的日期)起,64位Windows上的整个上2字节似乎都未使用
当然,对系统的任何更新都有可能改变
<>在C++ 64位环境中,是否存在新操作符的结果指针使用所有8字节?< /p>的情况。
正如其他人所解释的,不是在2020年(实际上)。但是,请注意一些潜在问题
- 这样的标记指针可能会使您的可执行文件变慢(在某些情况下,请进行基准测试),因为每次您想要取消对标记指针的引用时,您都需要在对其进行操作之前做一些事情
- 您的代码可能会变得可读性差得多,而且将来的贡献者很难对其进行维护
- 您的代码可能会禁用有趣的编译器优化
- 您的代码对于其他操作系统(包括Windows或Linux的未来版本)和其他体系结构(例如ARM或PowerPC)的可移植性可能要差得多
- 您的代码可能不会赢得太多内存空间。指向数据(在C++中,其<代码> sieOS/<代码>)可能有一个以上的单词,特别是当它包含多个多个指针时,因此,您将只赢得RAM的10%(性能会慢一些),因为大多数C++聚合类型(<代码>类<代码> > ES >代码>结构> <代码> -S有一个以上的单词。(只要使用
,就可能有一个隐藏指针)virtual
- 您将花费更多的调试工作
- 您可能会遇到这样的情况,即将溢出您为其使用的16位。因此,您可能需要检查这种情况,这样的运行时检查将使您的可执行文件更慢
考虑阅读与垃圾收集和编程语言实现问题相关的会议论文,例如会议(特别是PLDI).
&d
是指针的地址,而不是它所指向的东西。请您详细说明一下,您正在尝试实现什么?您正在寻找的技术称为指针标记。在x86_64上,您可以将一些数据存储在中,而不存储在中。首先,这是进程内存空间中的虚拟地址,这意味着操作系统可以自由访问第二,它是由OS管理的,而Windows实际上是在X86是一个全新的东西的时候实际使用最旧的位,所以考虑保留它。最后,为什么?为什么要使用2个字节来存储,我假设应该是引用计数器,而有专门的模板叫做SyrdY-PTR呢?此外,您必须意识到会有真正的性能损失,并且每次使用地址时都必须手动操作地址。这样的标记指针可能会使您的可执行文件变慢……而性能也会变慢。
这是一种过于宽泛的说法。标记指针的使用非常频繁st通常是因为它们可以使程序更快。当然,这是一种折衷,因此在某些情况下,它也可能较慢,并且应该与微不足道的替代方案进行比较。但这几乎适用于所有优化。现代CPU都是内存