gpt4 book ai didi

compiler-construction - wee_alloc(malloc 替代方案)如何知道在 WebAssembly 中从哪里开始堆?

转载 作者:行者123 更新时间:2023-12-04 08:24:33 26 4
gpt4 key购买 nike

我正在尝试使用 wee_alloc使用自定义语言,在 WebAssembly 中运行。但是,我需要完全理解它如何知道从哪里开始堆,以便我的堆栈和静态分配不会破坏它,反之亦然。

我的理解是 malloc 等。知道从哪里开始堆取决于平台,通常只是一个约定,或者在某些情况下不适用。然而,在 WebAssembly 中,我们只能拥有一块连续的线性内存,因此我们必须共享它并且需要使用约定。

Reading through the code it appears wee_alloc 所做的是假设我们开始使用的任何内存都是完全禁止的,而是使用 grow_memory创建堆所需的第一块内存的指令。这实际上意味着堆开始的索引/地址是初始大小的最高索引加一。 (编辑:它实际上不是 + 1,我忘了索引是从零开始的;一对一错误☠️)

例如如果我们从 1 页的初始内存大小开始:

 current_memory = 1 page = 64KiB = 65,536 bytes

然后堆从索引 65537 开始。

我的理解正确吗?

最佳答案

Your understanding is correct! With a small exception though: since the indexes are zero based, the last index of the first page is 65535, and the first index of the second page is 65536. - @pepyakin



https://github.com/rustwasm/wee_alloc/issues/61#issuecomment-416868326

关于compiler-construction - wee_alloc(malloc 替代方案)如何知道在 WebAssembly 中从哪里开始堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52022998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com