Compilers
C
WebAssembly
Comments 5
0
Общая идея состоит в том, чтобы использовать malloc() из JavaScript, чтобы выделить кусок памяти, скопировать туда значения и передать адрес (число!) где находится массив.

Хочешь не хочешь, а фронтендщику учить типы и указатели придется.
+1

Автору большой респект. Когда сам начинал работать с WebAssembly, долго мучился с Emscripten, так как все эти длинные и ненужные обертки были истинно противны. Также пришёл к самостоятельной компиляции clang, и никаких js весом в несколько мегабайт.


Наверное, это та самая статья, которой мне действительно не хватило, когда я начинал. Однозначно, очень полезно, а главное — со смыслом.

+3
Например, мы не даём никаких гарантий выравнивания. Но он достаточно хорошо и работает, так что...


#define MEMORY_ALIGN (8)

void * malloc(int n) {
    unsigned int r = bump_pointer;
    bump_pointer += ((n / MEMORY_ALIGN) + 1) * MEMORY_ALIGN;
    return (void *)r;
}
0
Как-то не очень экономно… для любого размера кратного MEMORY_ALIGN будут выделяться лишние MEMORY_ALIGN байт.

0
Да, спасибо, пропустил операцию:
#define MEMORY_ALIGN (8)

void * malloc(int n) {
    unsigned int r = bump_pointer;
    bump_pointer += (((n - 1) / MEMORY_ALIGN) + 1) * MEMORY_ALIGN;
    return (void *)r;
}
Only those users with full accounts are able to leave comments. , please.