[erlang-questions] mmap file to binary

Max Lapshin max.lapshin@REDACTED
Fri Apr 9 12:32:48 CEST 2010

On Fri, Apr 9, 2010 at 2:23 PM, Angel Alvarez <clist@REDACTED> wrote:
> Maybe a new alloc for mmaped files will allow manage diferences among OSes in a easy way...
> http://www.erlang.org/doc/man/erts_alloc.html
> It seems that the mmaped case is already covered using the  mseg_alloc:
> mseg_alloc

Maybe it will be good to dig inside this. However, there seems to be easy way:

erl_binary.h has erts_create_magic_binary. It should be changed to:

erts_create_mmap_binary(size_t size, int fd)
    Uint bsize = ERTS_MAGIC_BIN_SIZE(0);
    Binary* bptr = erts_alloc_fnf(ERTS_ALC_T_BINARY, 0);
    if (!bptr)
	erts_alloc_n_enomem(ERTS_ALC_T2N(ERTS_ALC_T_BINARY), bsize);
    bptr->flags = BIN_FLAG_MAGIC;
    bptr->orig_size = ERTS_MAGIC_BIN_ORIG_SIZE(size);
    bptr->orig_bytes = mmap(0, size, PROT_READ, MAP_FILE, fd, 0);
    erts_refc_init(&bptr->refc, 0);
    ERTS_MAGIC_BIN_DESTRUCTOR(bptr) = binary_mmap_destructor;
    return bptr;

static void binary_mmap_destructor(Binary *bptr)
  munmap(bptr->orig_bytes, bptr->orig_size);

More information about the erlang-questions mailing list