Я не могу положительно заявить, что это так, но это похоже на фрагментацию памяти (в одной из ее многочисленных форм).Распределитель (malloc) может хранить сегменты разных размеров для обеспечения быстрого выделения, после того как вы освобождаете память, вместо того, чтобы напрямую возвращать ее в ОС, она сохраняет сегменты, чтобы последующие распределения того же размера могли обрабатываться изта же память.В этом случае память будет доступна для дальнейших выделений того же размера.
Этот тип оптимизация обычно отключается для больших объектов, так кактребуется резервирование памяти, даже если она не используется.Если порог находится где-то между вашими двумя размерами, это объясняет поведение.
Обратите внимание, что хотя это может показаться странным, в большинстве программ (не тестовых, а реальных) шаблоны использования памяти повторяются: если вы запрашивали 100 тыс. Блоков один раз, это чаще всего имеет место.что ты сделаешь это снова.А сохранение памяти зарезервировано может повысить производительность и фактически уменьшить фрагментацию, которая будет исходить от всех запросов, поступающих из одного и того же сегмента.
Вы можете, если хотите,потратьте немного времени, узнайте, как работает ваш распределитель, проанализировав поведение.Напишите несколько тестов, которые получат размер X, освободят его, затем приобретут размер Y и затем покажут использование памяти.Зафиксируйте значение X и играйте с Y. Если запросы на оба размера удовлетворяются из одних и тех же сегментов, у вас не будет зарезервированной / неиспользуемой памяти (изображение слева), а когда размеры будут предоставляться из разных сегментов, вы увидитеэффект на изображении справа.
Обычно я не пишу код для окон, и у меня даже нет Windows 7, поэтому я не могу с уверенностью сказать, что это так, но это выглядит такэто.