
- •11. Кэш память.
- •12. Автоматическое и динамическое распределение памяти. Плюсы и минусы каждого из видов распределения памяти.
- •19. Сравнение Автоматической и динамической переменных.
- •20. Сравните работу с автоматическим массивом и с динамическимю
- •21.Принцип работы malloc и free. Как можно проверить смогли ли выделить память.
- •23. Способы передачи двухмерного массива в функцию. С примерами.
- •24. Архитектура Фон Неймана. Основные элементы эвм, принципы.
- •25. Архитектура Фон-неймана. Основные элементы эвм. Косвенная адресация операндов. Понятие операнда.
- •26. Архитектура Фон Неймана. Узкое горло арх. Фон Неймана. Способы решения.
- •31. Бса. Цикл и Ветвление. Как можно заменить цикл с предусловием равносильным алгоритмом на операциях ветвления. Пример на бса и псевдокоде и си.
19. Сравнение Автоматической и динамической переменных.
Автоматические переменные.По умолчанию переменные, описанные внутри функции, являются автоматическими. Можно, однако, это подчеркнуть явно с помощью ключевого слова auto:
main( )
{autointkat;}
Так поступают, если хотят, например, показать, что определение переменной не нужно искать вне функции. Автоматические переменные имеют локальную область действия. Только функция, в которой переменная определена, знает ее. Другие функции могут использовать переменные с тем же самым именем, но это будут независимые переменные, находящиеся в разных ячейках памяти. Автоматическая переменная начинает существовать при вызове функции, содержащей ее. Когда функция завершает свою работу и возвращает управление туда, откуда ее вызвали, автоматическая переменная исчезает. Область действия автоматической переменной ограничена блоком, т.е. { }, в котором переменная описана.
Все переменные, которые вы объявляли до сих пор, объявлялись внутри блока — то есть, внутри пары фигурных скобок. Такие переменные называются автоматическими, и о них говорят, что у них локальная область видимости, или область видимости блока. Автоматическая переменная "видима", начиная с точки, в которой она объявлена, и до конца блока, содержащего ее объявление. Пространство, которое занимает автоматическая переменная, выделяется автоматически в области памяти, называемой стеком, которая специально предназначена для этой цели. По умолчанию размер стека составляет 1 Мбайт, чего достаточно для большинства случаев, хотя если его не хватает, вы можете увеличить размер стека, установив опцию проекта /STACK в необходимое значение по своему выбору.
Динамические переменные.программа не может превысить лимит памяти, запланированный при трансляции. В противном случае ей потребуется дополнительная память, выделяемая во время выполнения программы. С этой целью на уровне библиотек в Си создан механизм порождения и уничтожения переменных самой работающей программой. Такие переменные называются динамическими, а область памяти, в которой они создаются – динамической памятью
основные свойства динамических переменных:
динамические переменные создаются и уничтожаются работающей программой путем выполнения специальных операторов или вызовов функций;
количество и размерность динамических переменных (массивов) может меняться в процессе работы программы. Это определяется числом вызовов соответствующих функций их параметрами;
динамическая переменная не имеет имени, доступ к ней возможен только через указатель;
функция создания динамической переменной ищет в «куче» свободную память необходимого размера и возвращает указатель на нее (адрес);
функция уничтожения динамической переменной получает указатель на уничтожаемую переменную.
Наиболее важным свойством динамической переменной является ее «безымянность» и доступность по указателю. Таким образом, динамическая переменная не может быть доступна «сама по себе», а только опосредованно через другие переменные или обычные именованные указатели. Работа с динамическими переменными и системой ДРП имеет ряд особенностей и сложностей. Они усугубляются еще и тем, что в Си в соответствии с требованиями эффективности программного кода, функции библиотеки минимально защищены от ошибок программирования: если динамическая переменная создана, а указатель на нее «потерян» программой, то такая переменная -существует, но недоступна для использования. Тем не менее, занимаемая ею память остается за программой; ошибки в процессе создания, уничтожения и работы с динамическими переменными приводят к непредсказуемым последствиям в работе программ