Понимание C malloc и sbrk () - PullRequest
       1

Понимание C malloc и sbrk ()

1 голос
/ 13 декабря 2011

Я пытаюсь понять разницу между malloc и sbrk в C и как они связаны друг с другом.Из того, что я понимаю, malloc и sbrk - одно и то же, но я читал, что malloc использует sbrk для выделения памяти.Это действительно сбивает с толку, может кто-нибудь объяснить мне?

Например, в этой программе malloc вызывает sbrk?если это так, он просто вызывает sbrk каждый раз, когда его вызывают, так что для этого примера 10 раз?

int main(int argc, char **argv) {
        int i;
        void *start_pos, *finish_pos;
        void *res[10];
        start_pos = sbrk(0);
        for (i = 0; i < 10; i++) {
                res[i] = malloc(10);
        }
        finish_pos = sbrk(0);
        return 0;
}

Спасибо,

Ответы [ 2 ]

9 голосов
/ 13 декабря 2011

sbrk запрашивает больше памяти у операционной системы.Это довольно низкоуровневая функция и не очень гибкая.

malloc использует sbrk, но более гибкая.Как правило, malloc запрашивает у sbrk большие куски памяти, а затем раздает куски этих больших кусков.Таким образом, большинство вызовов malloc будут не , а вызовы sbrk.

3 голосов
/ 13 декабря 2011

malloc использует sbrk - системный вызов, используемый для изменения сегмента данных В K & R C есть приложение, в котором описывается реализация malloc, free с использованием вызова sbrk sys.

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