Я пытаюсь использовать wee_alloc на пользовательском языке, запущенном в WebAssembly.Тем не менее, мне нужно полностью понять, откуда он знает, с чего начать кучу, чтобы мой стек и статические распределения не засоряли ее, и наоборот.
Насколько я понимаю, как malloc, et al.знать, с чего начать, куча зависит от платформы и часто просто соглашение, а в некоторых случаях не применимо.Однако в WebAssembly у нас может быть только один непрерывный фрагмент линейной памяти, поэтому мы должны разделить его, и необходимо использовать соглашение.
Чтение через код, которое кажется , что что wee_allocон делает предположение, что любая память, с которой мы начинаем, полностью запрещена, и вместо этого будет использовать инструкцию grow_memory
для создания первого куска памяти, необходимого для кучи.Это фактически означает, что индекс / адрес начала кучи является самым высоким индексом, чем когда-либо был начальный размер, плюс один.(Правка: на самом деле это не + 1, я забыл, что индексы основаны на нуле; ошибка в единицах ☠️)
например, если мы начнем с начального объема памяти 1 страницы:
current_memory = 1 page = 64KiB = 65,536 bytes
тогда куча начинается с индекса 65537.
Верно ли мое понимание?