Предмет "Программирование в Unix", преподаватель задал вопрос, что будет, если мы сделаем:
Код:
char *a = malloc(20);
char *b = malloc(10);
free(b);
free(a);
Я читал в Робачевском, что в malloc и free используется sbrk(), то есть, у нас сдвигается брейк-адрес вверх или вниз, давая процессу память или отнимая ее. То есть, у нас дважды увеличивается количество памяти (на 20, потом на 10), потом дважды уменьшается (на 10, потом на 20).
Но что будет, если мы освободим память в другом порядке? У нас ведь не должно зависеть освобождение от порядка операций, то есть, все должно быть хорошо. Но если мы сделаем наоборот, то у нас сначала адрес опустится на 20, отгрызая лишний кусок, а потом только на 10, и все будет плохо.
То есть, на самом деле там используется другой механизм? Если да, то подскажите, пожалуйста, какой. Если нет, то помогите понять, в чем я неправ.