Только не пинайте, плиз... :)
Вот есть такая программулина:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>
size_t total = 0;
void *reserve(size_t size) {
void *mem = mmap(NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE /*| MAP_NORESERVE*/ | MAP_ANONYMOUS,
-1, 0);
if(mem == MAP_FAILED) {
printf("Cannot reserve memory (%d KB): %s\n", size / 1024, strerror(errno));
printf("Reserved so far: %d KB\n", total);
return NULL;
}
total += size / 1024;
printf("Reserved %d KB (total %d KB)\n", size / 1024, total);
return mem;
}
#define M (1024*1024)
int main() {
void *mem = reserve(256 * M);
if (!mem)
return 0;
while(reserve(64 * M))
;
return 0;
}
Она последовательно, блоками по 64мб резервирует пространство ровно в
2 гб (я проверял на машинах с 2 гб. и 512 мб. памяти). Таково значение
переменной total в конце работы - а конец наступает, когда mmap
обламывается с ошибкой ENOMEM.
Я не понимаю, почему резервнуть таким образом можно только 2 гб...
Объясните, пожалуйста!
Заранее спасибо.

Ответ на:
комментарий
от hbee
Ответ на:
комментарий
от jek_

Ответ на:
комментарий
от jek_

Ответ на:
комментарий
от cvv
Ответ на:
комментарий
от jek_

Ответ на:
комментарий
от Murr
Ответ на:
комментарий
от Murr
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Как узнать, сколько памяти доступно для выделения? (2005)
- Форум Как MAP_GROWSDOWN в mmap? (2018)
- Форум Изменения пределов user-space памяти в ядре 2.6.8 (или 2.6.6/2.6.7) (2004)
- Форум трейсинг malloc/free (2014)
- Форум execve(script) error 13 (Permission denied) (2025)
- Форум почему сегфолтится програмка?? (2010)
- Форум mutt: Segmentation fault (core dumped) (2013)
- Форум [Golded+][Gentoo] Не запускается (2010)
- Форум date не читает /etc/localtime (2019)
- Форум Утилита для изменения аптайма (2008)