sbrk (0) не всегда возвращает одно и то же значение - PullRequest
0 голосов
/ 19 октября 2019

Мне было поручено кодировать реализацию алгоритма распределения друзей. Мне не очень комфортно с Си, и мое понимание указателей не так уж и велико. Я пытаюсь кодировать пользовательский распределитель памяти следующим образом:

Когда я впервые пытаюсь выделить память, я использую следующее:

    head = sbrk(0);
    printf("%p\n",sbrk(0));
    sbrk(MAX_SIZE);
    head = malloc(sizeof(head) + size);
    head->free = false;
    head->data = malloc(size);
    head->size += size;
    head->next = (void*)sbrk(0);

MAX_SIZE - это данность, а head - это пользовательскийSTRUCT. В начале это неинициализировано. По какой-то причине значение head-> next и sbrk (0), напечатанные в начале, не всегда совпадают. Иногда они оба будут равны одной и той же вещи, например: 0x7e357000, но иногда моя голова-> следующая будет принимать гораздо большее значение, например: 0xffffffffa4d8b000. Кажется, нет никаких причин, почему эти значения иногда совпадают. Кто-нибудь может объяснить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...