- •1.1. _Классика. Общие сведения
- •1.1.3. Элементарные функции ввода-вывода
- •1.2. Функции
- •Void surface(int dl, int VI, int shi);
- •1.3.1. Задание значений аргумента функций по умолчанию
- •1.3.2. Перезагружаемые функции (function overloading)
- •1.3.4. Допускается использование функции с различным количеством аргументов.
- •1.3.6. Дружественные функции (friend)
- •1.3.9. Виртуальные (virtual) функции
- •1.3.8. Шаблоны.
- •1.3.10. Абстрактные классы
- •1.4. Указатели (ссылки). Массивы.
- •Int fprintf ([указатель-На-Входной-Поток], Управляющая-строка, [,Имя-переменной-1, [Имя-переменной-2…]]);
- •Int cprintf (УправляющаяСтрока[,Имя-переменной-1, [Имя-переменной-2…]]);
- •1.6.1 Директива Include
- •1.6.2 Директивы #define и #undef
- •1.6.3 Условные Директивы
- •1.8..Проект (создание проекта классическими средствами языка с)
- •1 .8.1. Классы памяти
- •1.8.3. Проект
- •Раздел 2. Классы
- •31.10.11 Кр Связан с созданием классов и про ооп
- •Лекция 8 от 17.10.2011
- •7.2.2. Динамически присоединенные библиотеки
1.8..Проект (создание проекта классическими средствами языка с)
1 .8.1. Классы памяти
Auto
R egister
Extern
Static
AUTO:
Int i=10, n=5;
…
{
10
int i; for (i=0;i<n;i++);}//Распечаталось бы 1,2,3,4. А при выходе параметр имел бы значение 5.Printf(“%d”,i);
REGISTER:
TurboC++ => Options => Compiler => Optimization => Как будем использовать регистры
Определение объекта программы вызывает выделение памяти под его размещение. В языке С++ существуют понятия время существования и область видимости объекта с целью реализации принципа инкапсуляции, принципа полиморфизма и принципа захвата ресурсов при инициализации объекта. Инструментарий языка С++ позволяет управлять доступом к объекту в рамках одной функций, нескольких функций, в рамках программного файла и в целом проекта.
Класс памяти объекта предназначен для эффективного использования оперативной памяти. Класс памяти определяет время жизни и область видимости и объявляется спецификатором слева от описания типа данных или переменой с именем типа данных.
Время жизни – это интервал выполнения программы, в течении которого программный объект существует. Время жизни переменной может быть:
Глобальным, то есть имеющим определенное значение на протяжении всего времени выполнения проекта
Локальным, то есть имеющим определенное значение только внутри блока: {} – фигурными скобками обозначаются функции, составной частью оператора и т.д.
Функции всегда имеют глобальное время жизни.
Область видимости определяет часть программы, в которой можно использовать конкретный объект. Видимость может задаваться либо явным способом с помощью одного из следующих спецификаторов класса памяти: AUTO, REGISTER. Эти спецификаторы имеют локальную область видимости. Либо определяются по умолчанию – AUTO.,в зависимости от места определения объекта. Глобальные спецификаторы: EXTERN, STATIC.
Внутренний объект по умолчанию определяется с классом памяти AUTO, внешний – STATIC.
Класс памяти AUTO, как правило, используется для объявления переменных на внутреннем уровне и имеет значение NULL, если он автоматически не инициализирован. Переменная AUTO распределяется в стеке локальных данных и при выходе из блока их значения теряются. С целью затенения авто-переменных внутри блока допускается их блочное описание.
Класс памяти REGISER обеспечивает наиболее быстрый доступ к переменным, т.к. эти переменные (данные) размещаются в регистрах компьютера. Т.к. количество регистров ограничено, то части регистр-переменных может быть аппаратно присвоено значение auto.
В качестве регистр-переменных можно использовать только целочисленные переменные. Если значение не определено, то им также присваивается NULL.
Если необходимо сохранить значение переменной после выхода из блока, то используется класс памяти STATIC. Например, Printf.
Статик-переменные, как и авто, имеют локальную область видимости, но за счет того, что они располагаются в сегменте данных, они имеют глобальную время жизни.
Если статик-переменные не инициализированы, то в зависимости от типа данных они имеют значение NULL или 0. Они могут быть инициализированы любым способом, кроме ссылки на адрес авто-переменной.
Static:
Main()
{
}
Func1()
{
Static int a=1;
}
Func2()
{
Static int a=1;
}
#include <stdio.h>
Static b;
Void main(void)
{
Int func1(void);
Printf(“%d\n”,func1()); =>2
B++;
Printf(“%d\n”,func1()); =>3
Return;
}
Int func1(void)
{
Static int a;
If b=0
A=1;
A++;
Return a;
} // А - просто переменная. В используем для сравнения и для присвоения.
Внутренние статик-переменные локальны по отношению к функции объявления, но они продолжают существовать и после завершения работы данной функции.
Внешние статик-переменные не доступны для внешних файлов проекта, но они доступны для всех функций внутри программного файла, в котором они были объявлены.
Класс памяти EXTERN означает глобальную область видимости объекта и по своей сути является ссылкой на переменную, объявленную на внешнем уровне.
Первая цель использования внутреннего объявление испльзования состоит в том, чтобы переменная, объявленная на внешнем уровне, стала доступна внутри блока.
EXTERN:
File1.cpp:
MAIN()
{
}
FUNC1()
{extern int A;
}
File2.cpp:
Int F=1;
FUnc2()
{
}
FUNC3()
{
}
Класс extern необходим для внешних переменных, объявление которых находится после их использования. Переменную с классом extern не допускается инициализировать, т.к. по своей сути эти переменные являются ссылками (содержат адреса).
Функции, как объекты программы, имеют класс памяти extern либо static.
Статик-функция видна только в пределах одного программного файла, что широко используется в ООП, где экземпляры разных классов имеют одинаковые имена различных по содержанию функций.
Экстерн-функция видна в пределах всего программного объекта, поэтому, как правило, описание их прототипов размещается в заголовочном файле.
1
Память динамического распределения
-------------------------
Стек локальных данных
-----------------------
Глобальные и статические данные
-------------------------
Объектный код программы
.8.2. Структура объектного кода программыСтаршие
адреса
ОП
С
труктура
объектного кода программы состоит из
двух частей, которые загружаются в
оперативную память компьютера. Первый
сегмент содержит код программы, второй
– данные.
Tiny
S mall
M
edium
C ompact
L
arge
H uge
Сагмент: смещение
2 F84: 0532
N ear {16bit}
F ar {32bit}
H uge {32bit}
Segment{16bit} – for TC+++
Если данные занимают больше 1Мб, то им нужно специальное выделение памяти. Данные больше 64бит – примерно матрица: 5000х5000. Нужен особый вид адресации. Может получится так, что расчеты пошли нет так, это может быть вызвано не правильно выбраннойц моделью программы и не правильным размещением данных. Option => Compiler => Модель (Near, Far, Huge).
