compiler-construction - wee_alloc(malloc 替代方案)如何知道在 WebAssembly 中从哪里开始堆?
问题描述
我正在尝试以自定义语言使用wee_alloc,在 WebAssembly 中运行。但是,我需要完全了解它是如何知道从哪里开始堆的,这样我的堆栈和静态分配就不会破坏它,反之亦然。
我的理解是 malloc 等。知道从哪里开始堆取决于平台,通常只是一个约定,或者在某些情况下不适用。然而,在 WebAssembly 中,我们只能拥有一块连续的线性内存,因此我们必须共享它并且需要使用约定。
通读代码,wee_alloc 所做的似乎是假设我们开始使用的任何内存都是完全禁止使用的,而是使用该grow_memory
指令创建堆所需的第一块内存。这实际上意味着堆开始的索引/地址是初始大小的最高索引加一。(编辑:实际上不是 + 1,我忘记了索引是从零开始的;逐个错误☠️)
例如,如果我们从 1 页的初始内存大小开始:
current_memory = 1 page = 64KiB = 65,536 bytes
然后堆从索引 65537 开始。
我的理解正确吗?
解决方案
你的理解是正确的!不过有一个小例外:由于索引是从零开始的,所以第一页的最后一个索引是 65535,第二页的第一个索引是 65536。-@pepyakin
https://github.com/rustwasm/wee_alloc/issues/61#issuecomment-416868326
推荐阅读
- login - 无法登录到 joomla 管理员页面 - 404 错误
- javascript - 如何更改谷歌扩展中颜色输入的默认值
- vba - 在 VBA PowerPoint 中显示颜色选择器供用户选择
- python-3.x - 日期之间的 Python 和 pandas 数据透视表总和
- html - 仅在使用 Angular 7 关注输入字段时元素的外观
- java - 如何在 http 响应标头中使用特殊字符
- android - 房间 allowMainThreadQueries 与 Kotlin 协程
- spring-boot - Spring DevTools 持久会话空会话映射
- html - Bootstrap 4 Navbar:右对齐下拉菜单在右侧打开:溢出
- javascript - 如何附加多个背景图像