В общем, это зависит от реализации. В x86 (-64) Linux, я полагаю, что стандартный алгоритм doug lea malloc всегда выделяет минимум стандартной страницы x86 (4096 байт), поэтому для сценария, который вы описали выше, он просто сбрасывает границы для размещения дополнительных байтов. Когда речь идет, скажем, о перераспределении буфера в 7 байт в PAGE_SIZE + 1, я полагаю, что он попытается выделить следующую смежную страницу, если она доступна.
Стоит прочитать следующее, если вы разрабатываете для Linux:
По умолчанию Linux следует оптимистичной стратегии выделения памяти. Это означает, что когда malloc () возвращает не NULL, нет гарантии, что память действительно доступна. Это действительно
плохая ошибка Если окажется, что системе не хватает памяти, один или несколько процессов будут уничтожены печально известным убийцей OOM. В случае, если Linux используется в условиях, когда это будет
менее желательно внезапно потерять некоторые случайно выбранные процессы, и, кроме того, версия ядра достаточно свежая, можно отключить это чрезмерное выполнение, используя команду типа:
# echo 2 > /proc/sys/vm/overcommit_memory
См. Также каталог документации ядра, файлы vm / overcommit-accounting и sysctl / vm.txt.