![](/user_photo/_userpic.png)
- •Программа. Программирование.
- •Язык программирования. Синтаксис, семантика.
- •Способы представления алгоритмов. Язык блок-схем.
- •Этапы решения задач на эвм.
- •Информационная модель. Система.
- •Декомпозиция, композиция, редукция.
- •Атрибуты переменной. Объявление, определение и инициализация переменной.
- •Область видимости переменной. Время жизни переменной.
- •Типы данных в языках программирования. Переполнение типа данных.
- •Представление массивов в памяти. N-мерные массивы, тензоры.
- •Массивы и указатели. Массивы указателей и указатель на массив. Арифметика указателей.
- •Функции в языках программирования. Функция как подпрограмма. “Черный ящик”.
- •Концептуализация кода с помощью функций. Интерфейс функции. Процедура. Прототип функции.
- •Перегрузка функций. Правила вызова перегруженной функции. Сигнатура функции.
- •Рекурсия. Static-переменная функции.
- •Способы передачи аргументов в функцию.
- •1) Передача аргументов по значению
- •2) Передача параметров по ссылке
- •Архитектура Фон-Неймана. Принципы архитектуры Фон-Неймана.
- •Линейная память. Адресация.
- •Виртуальная память.
- •Процесс операционной системы. Основные разделы памяти процесса.
- •Стековая память.
- •Динамическая память или куча.
- •Статическая память.
- •Работа с файлами. Ввод/вывод на консоль.
- •Компилятор и компиляция. Сборка программы.
- •Интегрированная среда разработки.
- •Препроцессор и директивы препроцессора.
Рекурсия. Static-переменная функции.
Рекурсия - это многократный вызов функции самой себя определённой количество раз.
static-переменная функции - это переменная, которая была выделена "статически", что означает, что ее время жизни (или "экстент") - это весь запуск программы.
Способы передачи аргументов в функцию.
1) Передача аргументов по значению
Аргументы могут передаваться по значению (by value) и по ссылке (by reference). При передаче аргументов по значению внешний объект, который передается в качестве аргумента в функцию, не может быть изменен в этой функции. В функцию передается само значение этого объекта.
2) Передача параметров по ссылке
При передаче параметров по ссылке передается ссылка на объект, через которую мы можем манипулировать самим объектов, а не просто его значением.
Архитектура Фон-Неймана. Принципы архитектуры Фон-Неймана.
Архитектура фон Неймана — широко известный принцип совместного хранения команд и данных в памяти компьютера.
Принципы архитектуры фон Неймана:
1) Принцип двоичности.
Для представления данных и команд используется двоичная система счисления.
2) Принцип программного управления.
Программа состоит из набора команд, которые выполняются процессором друг за другом в определённой последовательности.
3) Принцип однородности памяти.
Как программы (команды), так и данные хранятся в одной и той же памяти. Над командами можно выполнять такие же действия, как и над данными.
4) Принцип адресуемости памяти.
Структурно основная память состоит из пронумерованных ячеек; процессору в произвольный момент времени доступна любая ячейка.
5) Принцип последовательного программного управления.
Все команды располагаются в памяти и выполняются последовательно, одна после завершения другой.
6) Принцип условного перехода.
Команды из программы не всегда выполняются одна за другой. Возможно присутствие в программе команд условного перехода, которые изменяют последовательность выполнения команд в зависимости от значений данных.
Линейная память. Адресация.
Линейная адресация – сплошной массив ячеек, неразбиваемый на независимые участки.
Указатели и ссылки в C++. Операции разыменования и взятия адреса.
Указатель – переменная, значением которой является адрес ячейки памяти.
Ссылка (в программировании) — это объект, указывающий на определенные данные, но не хранящий их.
Операция взятия адреса (&) используется для получения адреса объекта и помещения его в указатель.
Операция разыменования (*) осуществляет косвенный доступ к адресуемой величине через указатель.
Виртуальная память.
Виртуальная память — метод управления памятью компьютера, позволяющий выполнять программы, требующие больше оперативной памяти, чем имеется в компьютере, путём автоматического перемещения частей программы между основной памятью и вторичным хранилищем.
Процесс операционной системы. Основные разделы памяти процесса.
Процесс — это в выполняемая в данный момент программа. Выполнение процесса должно осуществляться последовательно. Процесс определяется как сущность, представляющая основную единицу работы, которая должна быть реализована в системе.
Вся виртуальная память процесса в Linux поделена на несколько областей (сегментов), различного назначения. Выделяются следующие области:
сегмент кода, содержащий инструкции процессора, который отображается на соответствующие области исполняемого файла. Традиционно обозначается как text.
сегмент инициализированных глобальных переменных, которые изначально загружаются из исполняемого файла. Обозначаются как data.
сегмент неинициализированных глобальных переменных, который изначально заполнен нулями. Традиционно обозначается BSS (Block Started by Symbol). Поскольку хранить в исполняемом файле нули не имеет смысла, то в нём хранится имя переменной (symbol) и её размер, а выделение памяти и инициализация нулями, происходит в момент запуска программы.
сегмент стека - Stack.
область кучи, для динамического выделения памяти функциями malloc(), new() и т.п. - Heap.
дополнительные сегменты кода, данных и BSS для каждой разделяемой между процессами библиотеки, такой как библиотека libc. Динамические библиотеки в Linux имеют суффикс в имени файла - .so, что означает shared object.
область для отображения в память файлов.
область для отображения разделяемой памяти (shared memory).
в современном Linux в отдельные области памяти vsyscall и vdso (virtual dynamic shared object) вынесен часто вызываемый код ядра, не требующий системных полномочий. В качестве примера такого обычно приводят вызов gettimeofday(). Вынесение кода в виртуальную память пространства помогает сэкономить время, расходуемое на изменение таблицы страниц во время системного вызова.