Разрыв кучи не меняется после malloc - PullRequest
0 голосов
/ 18 октября 2018
#include <stdio.h>
#include <errno.h>
#include <sys/resource.h>

int main(int argc, char *argv[]) {
    printf("main: %p\n", main);
    printf("brk before malloc: %p\n", sbrk(0));
    int *a = malloc(sizeof(int) * 100);
    printf("malloc at %p\n", a);
    printf("brk after malloc: %p\n", sbrk(0));
}

Вывод:

main: 0x108f9ae90
brk before malloc: 0x8fbc000
malloc at 0x7fb380c02b40
brk after malloc: 0x8fbc000

Почему адрес прерывания не меняется после malloc?Кроме того, почему верхняя часть адреса кучи (разрыва) так далеко от адреса malloc, и даже ниже, чем адрес main, который находится в текстовом сегменте?

Если я правильно понимаювозвращаемое значение второго вызова sbrk должно иметь наибольшее значение среди всех, потому что это адрес вершины кучи, а данные кучи должны иметь более высокий адрес, чем текстовый сегмент.Я ожидал 2-го brk> malloc'ed addr> 1st brk> main, но, видимо, это не тот случай.

1 Ответ

0 голосов
/ 18 октября 2018

Текущая реализация sbrk в Mac OS X является эмуляцией и имеет максимальное выделение 4 мегабайта.Смотрите здесь .

...