How to use mmap to allocate a memory in heap?

后端 未结 2 1743
旧巷少年郎
旧巷少年郎 2020-12-23 18:05

Just the question stated, how can I use mmap() to allocate a memory in heap? This is my only option because malloc() is not a reentrant function.

2条回答
  •  滥情空心
    2020-12-23 18:30

    Why do you need reentrancy? The only time it's needed is for calling a function from a signal handler; otherwise, thread-safety is just as good. Both malloc and mmap are thread-safe. Neither is async-signal-safe per POSIX. In practice, mmap probably works fine from a signal handler, but the whole idea of allocating memory from a signal handler is a very bad idea.

    If you want to use mmap to allocate anonymous memory, you can use (not 100% portable but definitely best):

    p = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
    

    The portable but ugly version is:

    int fd = open("/dev/zero", O_RDWR);
    p = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
    close(fd);
    

    Note that MAP_FAILED, not NULL, is the code for failure.

提交回复
热议问题