Если у вас есть динамически выделяемый буфер, размер которого изменяется во время выполнения непредсказуемым образом (например, вектор или строка), один из способов оптимизации его выделения — изменить размер резервного хранилища только в степени двойки (или в каком-либо другом наборе границ). пороги) и оставьте дополнительное пространство неиспользованным. Это помогает амортизировать затраты на поиск новой свободной памяти и копирование данных за счет небольшого дополнительного использования памяти. Например, спецификация интерфейса (reserve vs resize vs trim) многих контейнеров C++ stl имеет в виду такую схему.
Мой вопрос заключается в том, имеет ли стандартная реализация менеджера памяти malloc/realloc/free в Linux 3.0 x86_64, GLIBC 2.13, GCC 4.6 (Ubuntu 11.10) такую оптимизацию?
void* p = malloc(N);
... // time passes, stuff happens
void* q = realloc(p,M);
Иными словами, при каких значениях N и M (или при каких других обстоятельствах) p == q?