Я перекодирую функцию malloc, используя brk, sbrk и getpagesize().
Я должен соблюдать два правила:
1) Я должен выровнять свою память по степени 2
Это означает: Если вызов malloc: malloc(9); я должен вернуть им блок из 16 байт. (ближайшая степень числа 2);
2) Я должен выровнять разрыв (сегмент данных конца программы) на кратном 2 страницам.
Я думаю о правилах, мне интересно, прав ли я;
Правило 1) Мне просто нужно сделать возврат моего malloc (то есть адрес, возвращаемый malloc в шестнадцатеричном формате) кратным 2?
И для правила 2)
разрыв - это последний адрес в куче, если я не ошибаюсь, мне нужно установить мой разрыв следующим образом (разрыв - начало кучи) % (2 * getpagesize())== 0? или просто разрыв% (2 * getpagesize() == 0? Спасибо
malloc
, должна быть выровнена по определенной степени двойки? Фиксирована ли эта мощность в постановке задачи, она в два раза превышает размер страницы, передается ли она каким-то образом вызывающей сторонеmalloc
или это что-то еще? - person Eric Postpischil   schedule 10.02.2020malloc
было просто выравниванием памяти по «степени двойки», потому что каждый адрес памяти выравнивается по степени двойки. Если это точная формулировка постановки задачи, следует вернуться к учителю за разъяснениями. Если это не так, вы должны ввести точную формулировку в вопросе. - person Eric Postpischil   schedule 10.02.2020heap % 2 * pagesize
, потому что%
и*
имеют одинаковый приоритет, поэтому это будет проанализировано как(heap % 2) * pagesize
. Вам нужно, чтобыheap % (2 * pagesize)
было равно нулю. - person Eric Postpischil   schedule 10.02.2020