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