Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_ekz_po_OP.docx
Скачиваний:
22
Добавлен:
23.09.2022
Размер:
260.63 Кб
Скачать
  1. Рекурсия. Static-переменная функции.

Рекурсия - это многократный вызов функции самой себя определённой количество раз.

static-переменная функции - это переменная, которая была выделена "статически", что означает, что ее время жизни (или "экстент") - это весь запуск программы.

  1. Способы передачи аргументов в функцию.

1) Передача аргументов по значению

Аргументы могут передаваться по значению (by value) и по ссылке (by reference). При передаче аргументов по значению внешний объект, который передается в качестве аргумента в функцию, не может быть изменен в этой функции. В функцию передается само значение этого объекта.

2) Передача параметров по ссылке

При передаче параметров по ссылке передается ссылка на объект, через которую мы можем манипулировать самим объектов, а не просто его значением.

  1. Архитектура Фон-Неймана. Принципы архитектуры Фон-Неймана.

Архитектура фон Неймана — широко известный принцип совместного хранения команд и данных в памяти компьютера.

Принципы архитектуры фон Неймана:

1)      Принцип двоичности.

Для представления данных и команд используется двоичная система счисления.

2)      Принцип программного управления.

Программа состоит из набора команд, которые выполняются процессором друг за другом в определённой последовательности.

3)      Принцип однородности памяти.

Как программы (команды), так и данные хранятся в одной и той же памяти. Над командами можно выполнять такие же действия, как и над данными.

4)      Принцип адресуемости памяти.

Структурно основная память состоит из пронумерованных ячеек; процессору в произвольный момент времени доступна любая ячейка.

5)      Принцип последовательного программного управления.

Все команды располагаются в памяти и выполняются последовательно, одна после завершения другой.

6)      Принцип условного перехода.

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

  1. Линейная память. Адресация.

Линейная адресация – сплошной массив ячеек, неразбиваемый на независимые участки.

  1. Указатели и ссылки в C++. Операции разыменования и взятия адреса. 

Указатель – переменная, значением которой является адрес ячейки памяти.

Ссылка (в программировании) — это объект, указывающий на определенные данные, но не хранящий их.

Операция взятия адреса (&) используется для получения адреса объекта и помещения его в указатель.

Операция разыменования (*) осуществляет косвенный доступ к адресуемой величине через указатель.

  1. Виртуальная память.

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

  1. Процесс операционной системы. Основные разделы памяти процесса.

Процесс — это в выполняемая в данный момент программа. Выполнение процесса должно осуществляться последовательно. Процесс определяется как сущность, представляющая основную единицу работы, которая должна быть реализована в системе.

Вся виртуальная память процесса в 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(). Вынесение кода в виртуальную память пространства помогает сэкономить время, расходуемое на изменение таблицы страниц во время системного вызова.