Только не пинайте, плиз... :) Вот есть такая программулина: #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 гб... Объясните, пожалуйста! Заранее спасибо.
.png)

Ответ на:
комментарий
от 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)
- Форум почему сегфолтится програмка?? (2010)
- Форум mutt: Segmentation fault (core dumped) (2013)
- Форум [Golded+][Gentoo] Не запускается (2010)
- Форум date не читает /etc/localtime (2019)
- Форум Утилита для изменения аптайма (2008)
- Форум mmap Bus error (2005)