ENOMEM ao chamar sbrk () para 8GB

0

Estou executando o Fedora 24 com o kernel Linux v4.7.3 em uma máquina virtual usando o VMWare Fusion v8.1.1. Eu estou tentando escrever um programa c onde eu faço uma chamada para sbrk() como mostrado no código:

void *pool;

void mngr_init(size_t max) {
    struct rlimit limits;
    if (0 == getrlimit(RLIMIT_AS, &limits)) {
        printf("max: %lu, cur: %lu\n", limits.rlim_max, limits.rlim_cur);
    }

    pool = sbrk(1L<<33); // 8GB
    if (pool < 0 || errno == ENOMEM) {
        perror("error allocating mem\n");
        exit(1);
    }

    printf("pool starting address = %p\n", pool);
}

Incluí verificações nos limites de memória definidos para mostrar que ambos são ilimitados. A saída ao executar a função acima é:

max: 18446744073709551615, cur: 18446744073709551615
error allocating mem
: Cannot allocate memory

A alocação funciona bem quando eu uso 1L<<32 (4GB). Mas é meu entendimento que eu deveria ser capaz de estender isso tanto quanto eu gostaria, desde que não exceda os limites mostrados. Isso está incorreto? Por que não posso alocar mais do que isso?

Se necessário, aqui estão alguns resultados dos meus comandos ulimit , free e df .

$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15051
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15051
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
$ free -h
              total        used        free      shared  buff/cache       available
Mem:           3.7G        1.1G        203M         18M        2.4G        2.2G
Swap:          3.9G        592K        3.9G
$ df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G  7.5M  1.9G   1% /dev/shm
tmpfs                    1.9G  1.3M  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/fedora-root   37G   14G   22G  38% /
tmpfs                    1.9G  8.0K  1.9G   1% /tmp
/dev/mapper/fedora-home   28G   16G   12G  58% /home
/dev/sda1                477M  283M  166M  64% /boot
tmpfs                    382M  8.0K  382M   1% /run/user/1000
    
por kunruh 09.12.2016 / 06:13

0 respostas

Tags