Skip to content

emmalloc wastes memory with high alignments #20645

Closed
@kripken

Description

@kripken
#include <emscripten/emmalloc.h>
#include <stdio.h>

int main() {
  // Allocate 32MB with 1MB alignment.
  printf("%p\n", emmalloc_memalign(1024 * 1024, 32 * 1024 * 1024));
}

Build with

./emcc a.c -sMALLOC=emmalloc -sWASM=0 -sINITIAL_MEMORY=128mb --profiling

and then edit a.out.js to add some logging at the top of function sbrk:

 function sbrk($0) {
  console.log('sbrk', $0);

Running the program then shows

sbrk 48
sbrk 33554480
sbrk 33554480
0x100000

The initial sbrk is for emmalloc's internal data. Then we sbrk around 32MB, but then do so a second time for a total of 64MB.

This seems related to the high alignment, 1MB, as this does not happen without it.

This affects mimalloc when layered on emmalloc, since mimalloc does such large allocations with high alignment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions