Я читал, что это как-то уменьшает фрагментацию, но я не совсем понимаю, почему это так.
Это правильно. И это работает, потому что он устанавливает минимальный размер выделений. Допустим, вы добавляете отступы, чтобы каждый блок занимал не менее 1 КБ. Это означает, что никогда не будет ситуации, когда вы освобождаете часть памяти и что выделенное после этого выделение не будет вписываться в эту вновь освобожденную память, пока новое выделение не превышает 1 КБ.
Вымог бы легко увидеть этот эффект для себя с помощью нескольких простых экспериментов на листе бумаги. Во-первых, размер блока равен вашей общей памяти. Конечно, фрагментации не будет, но вы потеряете много памяти. Если размер блока составляет половину от размера, это в основном тот же сценарий, но меньше отходов. Когда у нас есть размер блока, который составляет одну треть от общей памяти, мы впервые сталкиваемся с фрагментацией. И это произойдет, когда будет выделен средний блок.
Короче говоря, заполнение уменьшает фрагментацию, но требует больше памяти.
Должен ли я заполнить весь блок до формата, скажем, кратного 4 или 8 байт, или заполнить мой блок, исключаяверхний и нижний колонтитулы.
Если вы реализуете это умным способом, то вы сможете изменить размер заполнения, просто изменив переменную. Поэтому найдите способ измерить проблемы и настроить заполнение в соответствии с вашими потребностями.
Помогает ли это также локальность в моей программе и как она помогает?
Это сложнее,Это может идти обоими путями и зависит от программ, использующих кучу. Но мое внутреннее чувство говорит, что заполнение, вероятно, уменьшит местность. В таком случае это может повлиять на производительность из-за пропадания кэша.