Я пытаюсь выяснить, сколько максимальной памяти может быть выделено процессу с помощью malloc().sbrk, malloc - максимальная память, которая может быть выделена
Так суть в:
start = sbrk(0);
malloc(1); /* so space is given to the data segment */
end = sbrk(0); /* start != end at this point */
/* Try to allocate in chunks as much as possible. */
while (end == sbrk(0)) {
malloc(1048576);
if (end == sbrk(0)){
maxMemory = maxMemory + 1048576;
}
}
return maxMemory;
Так то, что я не понимаю, что:
Если вы:
start = sbrk(0);
malloc(1);
end = sbrk(0);
OK, конец = начало
Но:
start = sbrk(0);
malloc(1048576);
end = sbrk(0);
начало == конец
Таким образом, в основном, разрыв программы (sbrk (0)) не перемещается с большими значениями. Таким образом, данный пока продолжается очень долго, пока sbrk (0) не перемещается, и я получаю действительно большое значение Max ~ 68gb.
Я бы ожидал, что любой malloc первоначально переместит сегмент данных, но это не так. Может ли кто-нибудь объяснить, почему это не так (где он его выделяет?) И/или что я делаю неправильно?
Функция sbrk() предназначена только для использования в семействе функций malloc. поэтому не следует напрямую вызывать функции пользователя. – user3629249
Эта строка: malloc (1); приводит к нескольким байтам сегмента .heap, а не к сегменту .data. Это также приводит к утечке памяти, поскольку возвращаемый указатель на выделенную память теряется. – user3629249
hopefully end определяется как void * надеюсь, maxmemory определяется как (32-битная система) int maxmemory = 0 или (64-разрядная система) long long int maxmemory = 0; – user3629249