Глава 6. Базовые типы данных и операции__________________________141

Как правило, это все, что остается после выделения памяти под сегмент стека, сегмент данных и сегмент кода.

Замечание

В общих чертах об этих областях памяти можно сказать следующее: в сегменте данных хранятся переменные, внешние по отношению к функциям и называемые глобальными, в сегменте кода находится код программы и в сегменте стека — параметры возвращения в программу и локальные переменные — внутренние по отношению к функциям (кроме порожденных операцией new).

Куча

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

Объекты размещаются в куче посредством объявления указателя и запроса на область памяти операцией new.

! Предупреждение

Многие операции имеют не одно значение. Например, операция * действует и как операция создания указателя, и как операция умножения. Другой пример — это операция «, которая может быть и побитным сдвигом влево, и операцией потокового вывода.

Значение операций выясняется из контекста. Когда * используется таким образом:

2*3

она интерпретируется как двухместная операция умножения. Когда тот же символ используется как

int *a он означает указатель на целое.

Разница между статически объявленной переменной и переменной, размещаемой в куче, в наличии операции указателя:

int var; // переменная размещается статически int *pvar; // объявлен указатель, ожидается вызов операции new

Здесь крайне важно не запутаться. Обе эти переменные, и var, и pvar, статические, но pvar должна указывать на объект, размещаемый в куче. Первая переменная определяет 32-битное (4-байтное) целое; вторая—это указатель на целое, также 32 бита длиной (в Borland C++ 5), но присваива-