Windows x64 的 44 位虚拟内存地址限制背后

2023-11-29

http://www.alex-ionescu.com/?p=50.

我读了上面的帖子。作者以单链表为例解释了为什么Windows x64仅支持44位虚拟内存地址。

struct {  // 8-byte header
        ULONGLONG Depth:16;
        ULONGLONG Sequence:9;
        ULONGLONG NextEntry:39;
} Header8;

第一个牺牲是减少序列的空间 将数字从 16 位改为 9 位,减少最大序列 列表中可以实现的数字。这仍然只留下 39 位 指针 — 与 32 位相比的平庸改进。通过强制 结构体在分配时是 16 字节对齐的,还可以多 4 位 赢了,因为现在可以始终假定底部位为 0。


哦,我听不懂。

“通过在分配时强制结构进行 16 字节对齐,可以多赢得 4 位,因为现在可以始终假定底部位为 0。”方法?


16 is 0010000 in binary

32 is 0100000 in binary

64 is 1000000 in binary

etc

您可以看到,对于所有 16 的倍数的数字,最后四位始终为零。 因此,您可以将它们保留下来,并在需要使用指针时将它们添加回来,而不是存储这些位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows x64 的 44 位虚拟内存地址限制背后 的相关文章

随机推荐

  • 从查询sql数据库获取数据到javascript

    我的代码有问题 像这样的情况 我有一个下拉列表 如果选择 个人 则会出现新的下拉列表 其中包含从数据库查询检索的数据 如果选择 公共 则下拉列表消失 HTML 代码如下
  • AES CBC 解密有效,CTR 无效

    我正在尝试使用 AES CBC 和 CTR 模式解密数据 密文前面已添加 16 字节 IV 我的密文数据采用以下格式 vector
  • live() 和 bind() 在 jQuery 1.7 后被弃用的原因是什么

    从 jQuery 1 7 开始 live and bind 已被弃用 取而代之的是 on 正在使用中 这两个都是很棒的功能 运行起来很有魅力 移除的目的是什么 这背后的技术原因是什么 And why on 是否提供使用 引用自此articl
  • 检查数组是否包含具有特定属性值的对象

    我有一个大约 30 个对象的数组 每个对象都有一个称为 注册 的属性 我用注册属性来唯一标识每个对象 每个对象还包含一个时间戳 始终是唯一的 每隔 30 秒 我就会从 API 下载这 30 个对象的一个 新实例 有可能将新对象添加到当前数组
  • 查找从数据框到特定位置最近的城市

    下面的数据框包含有关纬度 经度 州和城市的信息 我想找到 数据框中给出的每个城市的三个最近的城市 例如 从下面 dataframe 俄克拉荷马城和 Colarado SPringd 距离阿尔伯克基最近 所以距离阿尔伯克基最近的三个城市应该是
  • 将 JAR 添加到 Eclipse Java 库

    如何将 JAR 文件添加到 Eclipse 中已有的 Java 库 请注意 这不是用户库 也就是说 如果您查看 Java 项目的 Java 构建路径并单击 库 选项卡 您将看到该项目使用的库的列表 如果展开给定的库 您将看到该库中包含的 J
  • Linux C/C++程序如何支持多种语言?

    例如 在这个最简单的 hello world 程序中 include
  • 如何在 NAT 后面实现 CORBA 客户端

    我有以下接口 interface Server void subscribe in Client client interface Client void ping void pong 初始化时 客户端将连接到服务器并调用 subscrib
  • 您可以在两个 git 存储库之间共享文件及其历史记录吗?

    我不确定这是否可行 但我希望能够拥有一个文件并在 git 存储库中保存的两个项目中使用它 这样 如果我在一个项目中进行更改 则在拉取文件时另一个项目会接受该更改 理想情况下 该特定文件的历史记录将显示两个项目的所有更改 其他一切都将保持独立
  • 如何在 Windows 10 中启用 VT100 终端仿真?

    我想在Python程序执行期间 在IDLE或CMD或其他终端中 使用ANSI转义码打印彩色文本 请告诉我 Windows 命令提示符启用 VT100 终端仿真的确切命令 或者逐步告诉我另一种方法 我已经搜索并找到了一些方法 但我不明白如何实
  • 查找 MongoDB 中数组内字段的总和

    我有一个数据如下 gt db PQRCorp find pretty id 0 name Ancy results evaluation term1 score 1 463179736705023 evaluation term2 scor
  • 如何检测 Vaadin FileDownloader 何时成功或失败

    我有 Vaadin 7 代码 为用户提供下载文件的选项 Button btnDownloadResults new Button Download Results FontAwesome CLOUD DOWNLOAD resource ne
  • 高阶函数 - Javascript

    我正在使用 Eloquent Javascript 进行工作 功能count接受一个数组和一个测试函数 等于 x 作为参数 并返回测试函数返回 true 的数组中的元素数量 我了解这些功能工作的大致方式 并且从逻辑上讲total传递给red
  • 由于准备情况检查失败,Google App Engine 部署失败

    自定义应用程序引擎环境无法启动 这似乎是由于运行状况检查失败 该应用程序有一些自定义依赖项 例如 PostGIS GDAL 因此在应用程序引擎映像之上有几层 它构建成功并在 Docker 容器中本地运行 ERROR gcloud app d
  • 如何使用 matplotlib 沿着指定半径的点 (x1,y1) 和 (x2,y2) 的长度绘制圆柱体?

    我想使用 matplotlib 沿着点 x1 y1 和 x2 y2 的长度绘制一个具有指定半径 r 的圆柱体 请让我知道如何执行此操作 只是为了好玩 我将把它推广到任何轴 x0 y0 z0 到 x1 y1 z1 如果您想要 xy 平面上的轴
  • 当 SwiftUI 中相关实体发生更改时,如何更新 @FetchRequest?

    在 SwiftUI 中View我有一个List基于 FetchRequest显示a的数据Primary实体和通过关系连接Secondary实体 这View和它的List当我添加新的时 已正确更新Primary具有新的相关辅助实体的实体 问题
  • std::unique_ptr 用于需要 free 的 C 函数

    想想一个 C 函数 它返回的东西必须是freed 例如 POSIX 的strdup 我想在 C 11 中使用该函数并避免任何泄漏的机会 这是正确的方法吗 include
  • 如何使用单个路由文件捕获所有网址

    我想在 next js 中定义一条路由来捕获此网址 https mytestsite com mypath document this is to upload a document https mytestsite com mypath
  • 有没有办法在不同的域上拥有圣所

    我在域 A 上有 spa 在域 B 上有一个 Laravel 服务器 我想使用 sainttum 但 cookie 只在同一个域中工作 所以你建议有什么办法解决这个问题吗 我不想在 sainttum 上使用基于令牌的 AUTH 是的 您可以
  • Windows x64 的 44 位虚拟内存地址限制背后

    http www alex ionescu com p 50 我读了上面的帖子 作者以单链表为例解释了为什么Windows x64仅支持44位虚拟内存地址 struct 8 byte header ULONGLONG Depth 16 UL