🗊Презентация Модель памяти в языке С. Функции в языке С. Функции в ассемблере

Нажмите для полного просмотра!
Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №1Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №2Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №3Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №4Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №5Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №6Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №7Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №8Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №9Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №10Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №11Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №12Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №13Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №14Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №15Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №16Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №17Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №18Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №19Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №20Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №21Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №22Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №23Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №24Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №25Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №26Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №27Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №28Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №29Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №30Модель памяти в языке С. Функции в языке С. Функции в ассемблере, слайд №31

Содержание

Вы можете ознакомиться и скачать презентацию на тему Модель памяти в языке С. Функции в языке С. Функции в ассемблере. Доклад-сообщение содержит 31 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Есть ли у вас вопросы?
Описание слайда:
Есть ли у вас вопросы?

Слайд 2





Краткое содержание предыдущей серии
Как в ассемблере происходит сравнение?
Как используется результат сравнения?
В чем отличие логических операций от битовых?
Какие вы помните логические операции?
А битовые?
Чем опасны сдвиги в С?
Описание слайда:
Краткое содержание предыдущей серии Как в ассемблере происходит сравнение? Как используется результат сравнения? В чем отличие логических операций от битовых? Какие вы помните логические операции? А битовые? Чем опасны сдвиги в С?

Слайд 3





Краткое содержание этой серии
Модель памяти в языке С
Функции в языке С
Функции в ассемблере
Еще о командах перехода
Описание слайда:
Краткое содержание этой серии Модель памяти в языке С Функции в языке С Функции в ассемблере Еще о командах перехода

Слайд 4





Модель оперативной памяти в языке С
Статическая область – ее размер известен при компиляции; там хранятся глобальные и статические (static) переменные, там могу хранится константы.
Куча – область, из которой выделяется динамическая память (malloc() в С, new в С++ ). Ее максимальный размер задается как-то (например, программист просто выбирает число).

Стек – его размер меняется при работе программы. Максимальный размер задается как-то.

Плохие ситуации: выход за границы стека, выход за границы кучи, встреча кучи и стека.
Описание слайда:
Модель оперативной памяти в языке С Статическая область – ее размер известен при компиляции; там хранятся глобальные и статические (static) переменные, там могу хранится константы. Куча – область, из которой выделяется динамическая память (malloc() в С, new в С++ ). Ее максимальный размер задается как-то (например, программист просто выбирает число). Стек – его размер меняется при работе программы. Максимальный размер задается как-то. Плохие ситуации: выход за границы стека, выход за границы кучи, встреча кучи и стека.

Слайд 5





Функции в языке С: объявление
Объявление (прототип) – declaration: 
Что такое объявление?
Это «обещание», что где-то написано тело функции.
Пример: char foo(int a);
 
Где должно располагаться объявление?
До вызова. Т.е. выше по тексту.
В заголовочном файле (.h), если это глобальная функция.
В том же файле .с, если это функция static.
Объявление может быть совмещено с телом функции.
Ошибки линкера «undefined symbol имяФункции» означают, что есть объявление, но нет тела.
Описание слайда:
Функции в языке С: объявление Объявление (прототип) – declaration: Что такое объявление? Это «обещание», что где-то написано тело функции. Пример: char foo(int a); Где должно располагаться объявление? До вызова. Т.е. выше по тексту. В заголовочном файле (.h), если это глобальная функция. В том же файле .с, если это функция static. Объявление может быть совмещено с телом функции. Ошибки линкера «undefined symbol имяФункции» означают, что есть объявление, но нет тела.

Слайд 6





Функции в языке С: объявление
void * foo(int a);
void * - тип возвращаемого значения
foo – имя функции
int a – тип и имя параметра (аргумента)
аргументов может быть много, они разделяются запятой
аргументов может быть переменное количество
; - обязательный элемент синтаксиса, если дальше нет тела функции
Описание слайда:
Функции в языке С: объявление void * foo(int a); void * - тип возвращаемого значения foo – имя функции int a – тип и имя параметра (аргумента) аргументов может быть много, они разделяются запятой аргументов может быть переменное количество ; - обязательный элемент синтаксиса, если дальше нет тела функции

Слайд 7





Функции в языке С: определение
Что такое определение (тело) – definition?
Это сам код функции, который будет выполняться при вызове.
char foo(int a)
{
    ...
}
Описание слайда:
Функции в языке С: определение Что такое определение (тело) – definition? Это сам код функции, который будет выполняться при вызове. char foo(int a) { ... }

Слайд 8





Функции в языке С: вызов
Как происходит вызов функции:
char foo(int a); //определение должно быть до вызова
char result = foo(2); 
2 – параметр, передаваемый в функцию
result – переменная, в которую запишется возвращаемое значение
Описание слайда:
Функции в языке С: вызов Как происходит вызов функции: char foo(int a); //определение должно быть до вызова char result = foo(2); 2 – параметр, передаваемый в функцию result – переменная, в которую запишется возвращаемое значение

Слайд 9





Функции в языке С: вызов
char foo(int a); 
...
char result = foo(2); 
После этой строки управление «мистическим» образом передается на первую строку тела функции, причем параметр a будет равным 2.
Параметры функции внутри нее – просто локальные переменные.
Описание слайда:
Функции в языке С: вызов char foo(int a); ... char result = foo(2); После этой строки управление «мистическим» образом передается на первую строку тела функции, причем параметр a будет равным 2. Параметры функции внутри нее – просто локальные переменные.

Слайд 10





Функции и процедуры
В настоящее время различие минимально:
процедуры не возвращают значение, 
а функции – могут возвращать (но не обязательно).
Описание слайда:
Функции и процедуры В настоящее время различие минимально: процедуры не возвращают значение, а функции – могут возвращать (но не обязательно).

Слайд 11





Функции в ассемблере
Вызов функции в ассемблере: команды 
BL address
BLX register
Переход с сохранением адреса возврата в регистре R14 (Link Register, LR).
Адрес возврата – адрес следующей команды после BL.
А по какому адресу нужно перейти, чтобы попасть в функцию?
По адресу первой инструкции в ее теле.
Описание слайда:
Функции в ассемблере Вызов функции в ассемблере: команды BL address BLX register Переход с сохранением адреса возврата в регистре R14 (Link Register, LR). Адрес возврата – адрес следующей команды после BL. А по какому адресу нужно перейти, чтобы попасть в функцию? По адресу первой инструкции в ее теле.

Слайд 12





Функции в ассемблере
Что нужно сделать, чтобы вызвать функцию?
Как-то передать параметры
Как-то передать управление
Как-то вернуться к месту вызова
Как-то вернуть значение
При этом:
Внутри функции тоже могут вызвать функцию
Может быть даже ту же самую (рекурсия)
Ничего не должно сломаться!
Описание слайда:
Функции в ассемблере Что нужно сделать, чтобы вызвать функцию? Как-то передать параметры Как-то передать управление Как-то вернуться к месту вызова Как-то вернуть значение При этом: Внутри функции тоже могут вызвать функцию Может быть даже ту же самую (рекурсия) Ничего не должно сломаться!

Слайд 13





Функции в ассемблере: что может сломаться?
Весь код в ассемблере использует регистры.
Код в функции тоже использует регистры.
int a = 1 + sin(3.14);
MOV r0, 1 ; собираюсь складывать 1 и синус
(вызов sin) ; вызываю sin
.. а если функция sin тоже использовала r0?
Что же делать?
Описание слайда:
Функции в ассемблере: что может сломаться? Весь код в ассемблере использует регистры. Код в функции тоже использует регистры. int a = 1 + sin(3.14); MOV r0, 1 ; собираюсь складывать 1 и синус (вызов sin) ; вызываю sin .. а если функция sin тоже использовала r0? Что же делать?

Слайд 14





Функции в ассемблере: что может сломаться?
Содержимое регистров может быть испорчено при вызове функций. Что делать?
Содержимое регистров нужно куда-то сохранять до вызова и восстанавливать после.
Куда сохранять?
Описание слайда:
Функции в ассемблере: что может сломаться? Содержимое регистров может быть испорчено при вызове функций. Что делать? Содержимое регистров нужно куда-то сохранять до вызова и восстанавливать после. Куда сохранять?

Слайд 15





Функции в ассемблере: состояние регистров
Куда сохранять состояние регистров?
В специальную статическую область памяти (архитектура 8051)
Аппаратно в теневые регистры
В стек
Число регистров неизменно – всегда известно, сколько памяти нужно для сохранения.
Описание слайда:
Функции в ассемблере: состояние регистров Куда сохранять состояние регистров? В специальную статическую область памяти (архитектура 8051) Аппаратно в теневые регистры В стек Число регистров неизменно – всегда известно, сколько памяти нужно для сохранения.

Слайд 16





Функции в ассемблере
А не нужно ли сохранять что-нибудь еще?
Состояние LR для текущей функции (но это регистр)
Локальные переменные текущей функции?
Кстати, а где хранятся локальные переменные?
Локальные переменные хранятся:
В регистрах
В специальной статической области памяти
В стеке

Поэтому их не надо сохранять, но нужно не задеть случайно.
Описание слайда:
Функции в ассемблере А не нужно ли сохранять что-нибудь еще? Состояние LR для текущей функции (но это регистр) Локальные переменные текущей функции? Кстати, а где хранятся локальные переменные? Локальные переменные хранятся: В регистрах В специальной статической области памяти В стеке Поэтому их не надо сохранять, но нужно не задеть случайно.

Слайд 17





Функции в ассемблере
А как передавать параметры?
На регистрах (их ведь все равно сохраняем)
В специальной статической области памяти
В куче
В стеке

А как возвращать значение?
См. выше
Описание слайда:
Функции в ассемблере А как передавать параметры? На регистрах (их ведь все равно сохраняем) В специальной статической области памяти В куче В стеке А как возвращать значение? См. выше

Слайд 18





Стек
Доступ к стеку:
спец. команды push и pop
через SP (регистр – указатель стека)
или через еще какой-нибудь регистр
Т.е. к стеку можно обращаться через косвенно-регистровую адресацию.
Словно это обычный массив.
Собственно, в ARM стек и есть массив.
Описание слайда:
Стек Доступ к стеку: спец. команды push и pop через SP (регистр – указатель стека) или через еще какой-нибудь регистр Т.е. к стеку можно обращаться через косвенно-регистровую адресацию. Словно это обычный массив. Собственно, в ARM стек и есть массив.

Слайд 19





Функции в ассемблере: контекст
int foo(int a, int b)
{
1:	b--;
2:	bar(50);
2.1:   push r0-lr
2.2:   push 50
2.3:   BL bar;
3:	a++;
4:	return a;
}
Описание слайда:
Функции в ассемблере: контекст int foo(int a, int b) { 1: b--; 2: bar(50); 2.1: push r0-lr 2.2: push 50 2.3: BL bar; 3: a++; 4: return a; }

Слайд 20





Функции в ассемблере: контекст
int bar(int c)
{
1:	buzz(77);
1.1:   push r0-lr
1.2:   push 77
1.3:   BL buzz;
3:	return 0;
}
Описание слайда:
Функции в ассемблере: контекст int bar(int c) { 1: buzz(77); 1.1: push r0-lr 1.2: push 77 1.3: BL buzz; 3: return 0; }

Слайд 21





Функции: соглашение о вызове
Как передаются параметры?
Как возвращается результат?
Кто сохраняет контекст?
Кто восстанавливает контекст?
Все это называется «соглашение о вызове».
Соглашение о вызове может быть разным в зависимости от процессора, ОС, языка, желания левой пятки (fastcall, stdcall...)
Описание слайда:
Функции: соглашение о вызове Как передаются параметры? Как возвращается результат? Кто сохраняет контекст? Кто восстанавливает контекст? Все это называется «соглашение о вызове». Соглашение о вызове может быть разным в зависимости от процессора, ОС, языка, желания левой пятки (fastcall, stdcall...)

Слайд 22





Соглашение о вызове
В ARM – ARM Procedure Call Standard
(call convention) (очень упрощенно):
До четырех параметров передаются на регистрах (r0-r3); остальные через стек
Контекст сохраняет тот, кого вызвали
Восстанавливает контекст тот, кого вызвали
Возвращаемое значение передается через r0  (r0 и r1 для long long и double)
Т.е. слайды 18-19 были только для примера!
Описание слайда:
Соглашение о вызове В ARM – ARM Procedure Call Standard (call convention) (очень упрощенно): До четырех параметров передаются на регистрах (r0-r3); остальные через стек Контекст сохраняет тот, кого вызвали Восстанавливает контекст тот, кого вызвали Возвращаемое значение передается через r0 (r0 и r1 для long long и double) Т.е. слайды 18-19 были только для примера!

Слайд 23





Функции (в ARM): краткий итог
Параметры и локальные переменные хранятся в регистрах или в стеке
Доступ к переменным в стеке осуществляется через косвенно-регистровую адресацию (например, через SP)
Перед вызовом функции нужно сохранить контекст, после вызова – восстановить
Возвращаемое значение передается через регистр r0 (и r1)
Описание слайда:
Функции (в ARM): краткий итог Параметры и локальные переменные хранятся в регистрах или в стеке Доступ к переменным в стеке осуществляется через косвенно-регистровую адресацию (например, через SP) Перед вызовом функции нужно сохранить контекст, после вызова – восстановить Возвращаемое значение передается через регистр r0 (и r1)

Слайд 24





Суперскалярная архитектура (конвейеризация)
Идея: 
Каждая инструкция ассемблера для процессора – многостадийный процесс.
Разные стадии часто не связаны.
Если их выполнять параллельно, можно получить прирост производительности!
Описание слайда:
Суперскалярная архитектура (конвейеризация) Идея: Каждая инструкция ассемблера для процессора – многостадийный процесс. Разные стадии часто не связаны. Если их выполнять параллельно, можно получить прирост производительности!

Слайд 25





Простой трехстадийный конвейер ARM
Описание слайда:
Простой трехстадийный конвейер ARM

Слайд 26





Конвеер
Плюсы:
Процессор загружен равномерно
Инструкции выполняются параллельно
Минусы:
Инструкции могут быть зависимы (конфликты)
Команды перехода срывают конвеер и вызывают простой
Долгие команды вызывают простой
Описание слайда:
Конвеер Плюсы: Процессор загружен равномерно Инструкции выполняются параллельно Минусы: Инструкции могут быть зависимы (конфликты) Команды перехода срывают конвеер и вызывают простой Долгие команды вызывают простой

Слайд 27





Как борются с минусами конвейера?
Зависимые инструкции:
Команда NOP (no operation)
Долгие инструкции:
Внеочередное исполнение
И команда NOP
Срывы из-за переходов:
Размотка циклов
Условное выполнение вместо условных переходов
Inlining функций вместо перехода
Предсказание переходов
И еще много всего
Описание слайда:
Как борются с минусами конвейера? Зависимые инструкции: Команда NOP (no operation) Долгие инструкции: Внеочередное исполнение И команда NOP Срывы из-за переходов: Размотка циклов Условное выполнение вместо условных переходов Inlining функций вместо перехода Предсказание переходов И еще много всего

Слайд 28





Функции
Плюсы:
Повторное использование кода
Краткость кода
Функции – это интерфейс к чужому коду
Минусы:
Срыв конвейера
Кэш-промах
Накладные расходы на передачу параметров, переключение контекста и возврат
Описание слайда:
Функции Плюсы: Повторное использование кода Краткость кода Функции – это интерфейс к чужому коду Минусы: Срыв конвейера Кэш-промах Накладные расходы на передачу параметров, переключение контекста и возврат

Слайд 29





Минусы функций: что же делать?
Чего НЕ НАДО делать:
оптимизировать раньше времени
использовать глобальные переменные вместо параметров
бездумно использовать макросы
вообще не использовать функции
Что следует делать:
думать до того, как писать код
написать и отладить, потом оптимизировать
включить оптимизацию в компиляторе
аккуратно использовать inline и макросы
Описание слайда:
Минусы функций: что же делать? Чего НЕ НАДО делать: оптимизировать раньше времени использовать глобальные переменные вместо параметров бездумно использовать макросы вообще не использовать функции Что следует делать: думать до того, как писать код написать и отладить, потом оптимизировать включить оптимизацию в компиляторе аккуратно использовать inline и макросы

Слайд 30





Чистые функции
Чистая функция (pure) зависит только от своих параметров и не меняет глобальное состояние.
Ее результат постоянен.
Например: синус, косинус и т.д.
Чистые функции это хорошо!
Описание слайда:
Чистые функции Чистая функция (pure) зависит только от своих параметров и не меняет глобальное состояние. Ее результат постоянен. Например: синус, косинус и т.д. Чистые функции это хорошо!

Слайд 31





Реентерабельные функции
Реентерабельная (reentrant, «повторно входимая») функция не ломается, если ее одновременно вызывают несколько потоков.
Чистые функции реентерабельны.
Описание слайда:
Реентерабельные функции Реентерабельная (reentrant, «повторно входимая») функция не ломается, если ее одновременно вызывают несколько потоков. Чистые функции реентерабельны.



Похожие презентации
Mypresentation.ru
Загрузить презентацию