Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1
Кент Рейсдорф. BORLAND C++BUILDER. Страница 56
Для переменных встроенных типов и небольших массивов вполне достаточно использовать локальное распределение. Но если вы собираетесь работать с большими массивами, структурами или классами, имеет смысл прибегнуть к динамическому распределению памяти из «кучи». Эта память складывается из свободной оперативной памяти и свободного пространства на жестком диске. Иными словами, в типичной Windows-системе вы легко можете иметь до 100 Мб динамически распределяемой памяти. Достоинство такого подхода — практически неограниченный размер виртуальной памяти, доступной вашим программам. Недостаток заключается в том, что использование динамически распределяемой памяти требует некоторых накладных расходов и обращение к ней происходит немного медленнее, чем к памяти из стека. В большинстве программ эти накладные расходы можно не принимать во внимание. Работа с динамической памятью предъявляет также повышенные требования к программисту — не настолько большие, как вы можете подумать, но все же.
Динамическое распределение (dynamic allocation) означает, что память для объектов выделяется в «куче».
Под «кучей» (heap) в Windows-программах понимается вся виртуальная память компьютера.
Динамическое размещение объектов и указатели
В программах на Си++ динамическое распределение памяти осуществляется с помощью оператора new. Я намеревался рассказать об операторе new немного позже, но вам нужен небольшой пример, чтобы можно было продолжить обсуждение указателей. В предыдущей главе я рассказывал о структурах и использовал в качестве примера структуру mailingListRecord. Размещение структуры в стеке выглядит следующим образом:
mailingListRecord listArray; strcpy(listArray.firstName, "Ian"); strcpy(listArray.lastName, "Spencer"); // и т.д.