Как wee_alloc (альтернатива malloc) знает, где начать кучу в WebAssembly? - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь использовать wee_alloc на пользовательском языке, запущенном в WebAssembly.Тем не менее, мне нужно полностью понять, откуда он знает, с чего начать кучу, чтобы мой стек и статические распределения не засоряли ее, и наоборот.

Насколько я понимаю, как malloc, et al.знать, с чего начать, куча зависит от платформы и часто просто соглашение, а в некоторых случаях не применимо.Однако в WebAssembly у нас может быть только один непрерывный фрагмент линейной памяти, поэтому мы должны разделить его, и необходимо использовать соглашение.

Чтение через код, которое кажется , что что wee_allocон делает предположение, что любая память, с которой мы начинаем, полностью запрещена, и вместо этого будет использовать инструкцию grow_memory для создания первого куска памяти, необходимого для кучи.Это фактически означает, что индекс / адрес начала кучи является самым высоким индексом, чем когда-либо был начальный размер, плюс один.(Правка: на самом деле это не + 1, я забыл, что индексы основаны на нуле; ошибка в единицах ☠️)

например, если мы начнем с начального объема памяти 1 страницы:

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

тогда куча начинается с индекса 65537.

Верно ли мое понимание?

1 Ответ

0 голосов
/ 29 августа 2018

Ваше понимание верно! За небольшим исключением: индексы начинаются с нуля, последний индекс первой страницы - 65535, и первый индекс второй страницы - 65536. - @ pepyakin

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

...