Необходимо выровнять память по степени 2 и выровнять разрыв программы по кратному 2 * getpagesize () в C - PullRequest
0 голосов
/ 10 февраля 2020

Я перекодирую функцию mallo c, используя brk, sbrk & getpagesize ()

Я должен следовать двум правилам:

1) Я должен настроить свою память на мощность 2

Это означает: если вызов для mallo c равен: mallo c (9); я должен вернуть им блок из 16 байт. (ближайшая степень 2);

2) Я должен выровнять разрыв (сегмент данных конца программы) на нескольких страницах.

Я думаю о правилах, я ' мне интересно, правда ли я;

Правило 1) Мне просто нужно сделать возврат моего mallo c (поэтому адрес, возвращенный mallo c в гекса) кратным 2?

А для правила 2)

разрыв - это последний адрес в куче, если я не ошибаюсь, нужно ли мне устанавливать свой разрыв так (разрыв - начало кучи)% (2 * getpagesize ()) == 0? или просто разрыв% (2 * getpagesize () == 0? Спасибо

1 Ответ

0 голосов
/ 10 февраля 2020

1) Я должен выровнять свою память по степени 2

Правило 1) Мне просто нужно вернуть мой mallo c (поэтому адрес, возвращаемый mallo c в гекса) кратный 2?

Для адреса, который должен быть выровнен по степени 2, это 2 p адрес должен быть кратным 2 p .

2) Я должен выровнять разрыв (сегмент данных конца программы) по кратному 2 страниц.

разрыв - это последний адрес в куче, если я не ошибаюсь, нужно ли мне устанавливать свой разрыв следующим образом (разрыв - запуск кучи)% ( 2 * getpagesize ()) == 0? или просто разрыв% (2 * getpagesize () == 0?

Фраза «установить мой разрыв» неясна. Вам нужно использовать sbrk(0), чтобы получить текущее значение разрыва и посчитайте, сколько вам нужно добавить к нему, чтобы сделать его кратным удвоенному размеру страницы.Это говорит вам, где вам нужно начать блок памяти, который выровнен к кратному удвоенному размеру страницы. Затем вам понадобится дополнительная память для хранения любого количества данных, которые вы хотите поместить туда (выделяемое количество).

...