Мой вопрос, как говорит тилте, согласно моему учебнику
int brk(void *end_data_segment);
Системный вызов brk() устанавливает прерывание программы в положение, указанное end_data_segment. Поскольку виртуальная память выделяется в единицах страниц, end_data_segment эффективно округляется до границы следующей страницы.
и поскольку в Linux sbrk() реализована как библиотечная функция, использующая системный вызов brk(), поэтому я ожидаю, что обе функции будут округлять прерывание программы до границы следующей страницы. но когда я тестирую на Linux-машине x86_64 (ubuntu), оказывается, что обе функции перемещают прерывание программы точно в требуемое положение (я пытался использовать brk, результат тот же).
int main(int argc, char *argv[])
{
void *ori = sbrk(100);
printf("original program break at %p\n", ori);
void *now = sbrk(0);
printf("program break now at %p\n", now);
return 0;
}
это результат
original program break at 0x56491e28f000
program break now at 0x56491e28f064
так что здесь происходит?
is effectively rounded up
не значит вернется, - person KamilCuk   schedule 24.12.2020