win7x64下变量内存地址分配问题

sjy88813 2012-07-26 04:32:19
创建了一个结构体变量,wrap
然后将它的地址赋值给
int _64 i = reinterpret_cast<DWORD>(&wrap);
本来应该截断的,因为DWORD是4字节的,地址是8字节的,可是我看内存地址的高字节全为0
00000000`002fe2d0
这样得到的i就是正确的。。试了n边,wrap的地址一直这样分配(win7 x64),可是我不知道为什么高位地址一直不用?
大家有什么这方面的资料分享吗?
谢谢!
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
辰岡墨竹 2012-08-19
  • 打赏
  • 举报
回复
不过最多也只能有44位,因为64位内存太大,根本用不到,所以现在的CPU和OS都只用了部分地址线,比如48位、52位的CPU地址线,Windows是44位。所以内存地址中间有一个大洞,额外的高位必须全为0或1,否则会出错。
辰岡墨竹 2012-08-19
  • 打赏
  • 举报
回复
可以用的,但是地址是向上增长的,每个程序有独立的内存空间。你必须把4GB以下的部分都用掉了上面才有啊。
Gloveing 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
我的意思是为什么wrap的地址的高位32位为什么一直为0,而不是其他的比如00000068`002fe2d0这样的地址,我想知道给wrap分配地址高位总是0的原因。。因为我在win8测试时高位就不全是0,程序就出问题了。
[/Quote]
字符扩展的结果
sjy88813 2012-08-17
  • 打赏
  • 举报
回复
我的意思是为什么wrap的地址的高位32位为什么一直为0,而不是其他的比如00000068`002fe2d0这样的地址,我想知道给wrap分配地址高位总是0的原因。。因为我在win8测试时高位就不全是0,程序就出问题了。
Gloveing 2012-08-05
  • 打赏
  • 举报
回复
DWORD是4字节的,地址是8字节的,确实截断了啊,
但是你赋值给了int _64 i ,这个变量的地址也是64位的,所以看起来是00000000`002fe2d0 ,一切正常啊

18,124

社区成员

发帖
与我相关
我的任务
社区描述
Windows客户端使用相关问题交流社区
社区管理员
  • Windows客户端使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧