Глава 6. Базовые типы данных и операции__________________________141
Как правило, это все, что остается после выделения памяти под сегмент стека, сегмент данных и сегмент кода.
Замечание
В общих чертах об этих областях памяти можно сказать следующее: в сегменте данных хранятся переменные, внешние по отношению к функциям и называемые глобальными, в сегменте кода находится код программы и в сегменте стека — параметры возвращения в программу и локальные переменные — внутренние по отношению к функциям (кроме порожденных операцией new).
Куча
Куча используется для размещения переменных, когда вы сами управляете их созданием и уничтожением, или когда размер необходимой вам области памяти превосходит объем доступной памяти в стеке, или когда вам требуется и то и другое. *
Объекты размещаются в куче посредством объявления указателя и запроса на область памяти операцией new.
! Предупреждение
Многие операции имеют не одно значение. Например, операция * действует и как операция создания указателя, и как операция умножения. Другой пример — это операция «, которая может быть и побитным сдвигом влево, и операцией потокового вывода.
Значение операций выясняется из контекста. Когда * используется таким образом:
2*3
она интерпретируется как двухместная операция умножения. Когда тот же символ используется как
int *a он означает указатель на целое.
Разница между статически объявленной переменной и переменной, размещаемой в куче, в наличии операции указателя:
int var; // переменная размещается статически int *pvar; // объявлен указатель, ожидается вызов операции new
Здесь крайне важно не запутаться. Обе эти переменные, и var, и pvar, статические, но pvar должна указывать на объект, размещаемый в куче. Первая переменная определяет 32-битное (4-байтное) целое; вторая—это указатель на целое, также 32 бита длиной (в Borland C++ 5), но присваива-