Визуальное программирование и MFC

       

Несколько советов по работе с динамической памятью


Чем интенсивнее используется куча, тем в большей мере она фрагментируется и тем медленнее работает программа. Если предполагается, что время непрерывного функционирования программы будет исчисляться часами или днями, то следует проявить осторожность. Лучше выделить всю необходимую память при запуске программы и освободить ее при закрытии, но это не всегда возможно. Тут может помешать класс CString, который постоянно выделяет и освобождает крошечные порции памяти. Однако разработчики MFC недавно внесли в него ряд улучшений.

Если программа в основном выделяет блоки малого размера, но изредка требует 6ольших блоков (занимая их на время, отличное от того, на которое она занимает малые блоки), тогда стоит подумать о выделении крупных блоков функцией HeapAlloc, а не new. Это несколько уменьшит степень фрагментированности CRT-кучи. Не следует забывать время от времени вьзывать _heapmin. Стоит тщательно следить за тем, как был получен тот или иной блок памяти – приложению не миновать серьезных проблем, если оно, например, вызовет HeapFree для указателя, полученного с помощью new.

Следует учесть, что размер стека может быть таким, как надо. Так как теперь нет ограничения в 64 Кб, в стек можно помещать объекты большого размера, что уменьшает необходимость в распределении памяти из кучи.



Содержание раздела