![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Динамическое распределение памяти |
Курсовая работа по дисциплине основы алгоритмизации и программирования студента Золин А.С. Министерство высшего и профессионального образования РФ Уральский государственный технический университет Радиотехнический факультет Кафедра “Автоматика и информационные технологии” Екатеринбург 2000 Введение Целью работы является демонстрация работы с динамической памятью на примере программ разработанных к заданиям 2, 6, 8, 10, 12, 14, 16 из методического указания . Динамическое распределение памяти предоставляет программисту большие возможности при обращении к ресурсам памяти в процессе выполнения программы, и корректная работа программы с динамической памятью в существенной степени зависит от знания функций для работы с ней. Руководство пользователя Задание №2 Для того чтобы убедиться что для каждого из однобайтовых данных в куче выделено 16 байт т.е. 1 параграф нужно сравнить три адреса, которые появяться на экран в рез-те действия этой программы. Если числа в этих адресах стоящие до двоеточия увеличиваютя (от первого к последнему) на еденичку, то это означает что на каждый блок выделен один параграф в куче = 16 байт. Для получения этих адресов в отладчике достаточно нажать Al F4 (в режиме отладчика) затем в появившемся запросе ввести x появится меню, вверху которого и будет нужный адрес, аналогично для y, z. Задание №6 Программа выделяет память под 20 переменных типа i , заполняет их случайными числами из интервала и выводит их на экран. Задание №8 Программа хранит матрицы в виде двух структур: S ruc Ma r1{i m, ; i p r}; S ruc Ma r2{i m, ; i p r}; И выделяет память под них с помощью следующих функций: I Di Ma r1(Ma r1 ma r); I Di Ma r2(Ma r2 ma r); Задание №10 Программа получает с клавиатуры натуральные числа, сохраняя их в куче, конец ввода – число 0. По окончании ввода числа выводятся на экран. Задание №12 Программа вычисляет октоэдрическую норму матрицы произвольных размеров. Задание №14 Программа вычисляет общий размер свободной кучи. Задание №16 Программа выполняет считывание матрицы произвольных размеров из файла (разделителями являются пробелы), вывод этой матрицы на экран, а также запись в файл. Руководство программиста В этом разделе будут приведены листинги программ с комментариями. Задание №2 #i clude &l ;s dio.h> #i clude &l ;alloc.h> #i clude &l ;co io.h> i mai (void) { char x, y, z; //Объявление переменных x=(char )malloc(sizeof(char)); //Выделение динамической памяти для x y=(char )malloc(sizeof(char)); // --//-- y z=(char )malloc(sizeof(char)); // --//-- z clrscr(); // Очистка экрана pri f("Adress of x=%p ",x); // Вывод на экран адреса начала блока для x pri f("Adress of y=%p ",y); // --//-- y pri f("Adress of z=%p ",z); // --//-- z free (z); // Освобождение блока выделенного для z free (y); // --//-- y free (x); // --//-- x / Для того чтобы убедиться что для каждого из однобайтовых данных в куче выделено 16 байт т.е
. 1 параграф нужно сравнить три адреса, которые поя- вяться на экран в рез-те действия этой программы. Если числа в этих адресах стоящие до двоеточия увеличиваютя (от первого к последнему) на еденичку, то это означает что на каждый блок выделен один параграф в куче = 16 байт. Для получения этих адресов в отладчике достаточно нажать Al F4 (в режиме отладчика) затем в появившемся запросе ввести x появится меню, вверху которого и будет нужный адрес, аналогично для y, z. / re ur 0; } Задание №6 #i clude &l ;s dio.h> #i clude &l ;co io.h> #i clude &l ;alloc.h> #i clude &l ;process.h> #i clude &l ;s dlib.h> // var - число элементов массива #defi e var 20 mai () { clrscr(); //Инициализация генератора случ. чисел ra domize(); i mas; //Выделение памяти под массив if (!(mas=(i )malloc(sizeof(i ) var))) { pri f ("Не достаточно памяти для выделения массива "); exi (1); } //Заполнение массива случ. числами в диапазоне от -3 до 7 с одновременным //выводом на экран for (i i=0;i&l ; var;i ) { mas=ra dom(11)-3; pri f(" =%i %i ",i,mas); } //Освобождение памяти из под масси ва free (mas); re ur 0; } Задание №8 #i clude &l ;s dio.h> #i clude &l ;co io.h> #i clude &l ;alloc.h> #i clude &l ;process.h> //Структура Ma r1, которая содержит размеры матрицы, а также одномерный //массив элементов матрицы и функцию для задания размеров матрицы s ruc Ma r1{ i m, ; i p r; void Se Razm(i mm,i ) { m=mm; = ; } }; //Структура Ma r1, которая содержит размеры матрицы, а также двумерный //массив элементов матрицы и функцию для задания размеров матрицы s ruc Ma r2{ i m, ; i p r; void Se Razm(i mm,i ) { m=mm; = ; } }; i Di Ma r1 (Ma r1 ma r); //функция выделения памяти для Ma r1 i Di Ma r2 (Ma r2 ma r); //функция выделения памяти для Ma r2 void FreeMa r1(Ma r1 ma r); //функция освобождения памяти из под Ma r1 void FreeMa r2(Ma r2 ma r); //функция освобождения памяти из под Ma r2 mai () { clrscr(); Ma r1 M1; //Создание экземпляра Ma r1 Ma r2 M2; //Создание экземпляра Ma r2 M1.Se Razm(2,2); //Задание размеров Ma r1 M2.Se Razm(2,2); //--//-- Ma r2 if (!Di Ma r1(&M1)) //Выделение памяти для Ma r1 { pri f("Не хватает памяти под M1 "); exi (1); } if (!Di Ma r2(&M2)) //--//-- Ma r2 { pri f("Не хватает памяти под M2 "); exi (1); } FreeMa r1 (&M1); //Освобождение памяти из под Ma r1 FreeMa r2 (&M2); //--//-- Ma r2 re ur 0; } i Di Ma r1 (Ma r1 ma r) { if (!((ma r->p r)=(i )malloc(sizeof(i ) (ma r->m) (ma r-> )))) re ur 0; re ur 1; } i Di Ma r2 (Ma r2 ma r) { if (!(ma r->p r=(i )malloc(sizeof(i ) (ma r->m)))) re ur 0; for (i i=0;i&l ;ma r->m;i ) { if (!(ma r->p r=(i )malloc(sizeof(i ) (ma r-> )))) re ur 0; } re ur 1; } void FreeMa r1(Ma r1 ma r) { if (ma r->p r) free (ma r->p r); } void FreeMa r2(Ma r2 ma r) { for (i i=0;i&l ;ma r->m;i ) { if (ma r->p r); } if (ma r->p r) free(ma r->p r); } Задание №10 #i clude &l ;s dio.h
> #i clude &l ;co io.h> #i clude &l ;alloc.h> #i clude &l ;process.h> mai () { clrscr(); char mas; i c,m=0, =0; mas=(char )malloc(sizeof(char )); //Выделение памяти под первое число mas=(char )malloc(sizeof(char)); //Выделение памяти под первую позицию //цифры в числе pri f ("I pu "); while ((c=ge ch())-'0') //Пока не ввели 0 { if (c==13) //При нажатии E er выделение памяти { //под новое число mas=0; m ; if (!(mas=(char )realloc(mas,sizeof(char ) (m 1)))) { pri f ("Не хватает памяти "); exi (1); } =0; pu ch(10); //Перевод карретки и перевод строки pu ch(13); //при выводе на экран } if ((c&l ;'0') (c>'9')) co i ue; //Проверка на ввод только цифр if ((! )&&(m)) //Выделение памяти под первую позицию { //в следующем числе if(!(mas=(char )malloc(sizeof(char)) )) { pri f ("Не хватает памяти "); exi (1); } } mas=c; //Занесение цифры на нужную позицию ; //в число if ( ) //Выделение памяти под следующую { //позицию в числе if (!(mas,sizeof(char) ( 1)))) { pri f ("Не хватает памяти "); exi (1); } } pu ch (c); //Вывод цифры на экран } pri f ("Ou pu "); for (i i=0;i&l ;m;i ) pri f ("%s ",mas); //Вывод всех чисел на экран for (i=0;i&l ;m;i ) if (mas); //Освобождение памяти if (mas) free(mas); re ur 0; } Задание №12 #i clude &l ;s dio.h> #i clude &l ;co io.h> #i clude &l ;alloc.h> #i clude &l ;process.h> s ruc Ma r{ i m, ; double p r; void Se Razm(i mm,i ) { m=mm; = ; } }; i Di Ma r (Ma r ma r); //функция выделения памяти для Ma r void FreeMa r(Ma r ma r); //функция освобождения памяти из под Ma r void Se elem(Ma r ma r,double M); //функция заполнения матрицы элементами double Oc orm(Ma r ma r); //функция вычисления нормы матрицы mai () { clrscr(); double M ={{1,2,3},{4,5,6},{7,8,9}}; Ma r M; M.S
Вы решили, что система всегда должна отвечать на прерывания с более высоким приоритетом, когда они происходят. Как это может быть выполнено? Вспомните, что 68HC12 автоматически отключает систему прерывания при ответе на прерывание, Подсказка: Посмотрите описание команд CLI и SEI ассемблера 68HC12. Исследовательские 1.PРазработайте стек и связанные с ним функции, использовав список с указателями для динамического распределения памяти. 2.PРазработайте приоритетную часть системы фонового опроса с передним планом, для защиты от перегрева транзисторов, описанной в применениях раздела 8.9. На рис.P8.25 (совпадающим с рис.P8.21 и повторенном здесь для удобства) показана система защиты от транзистора от перегрева. Температура транзистора постоянно контролируется датчиком температуры LM34 (в пластмассовое корпусе) приклеенным к металлическому корпусу мощного транзистора K-220. Напряжение на на выходе датчика линейно связано с его температурой (коэффициент 10 мВ/`С). Выход LM34 подан на один из входов аналогового компаратора, построенного на ОУ
1. Изучение принципов построения оперативной памяти
2. Накопители на жестких дисках
3. Накопители на жестких дисках
4. Виды и принципы работы кэш-памяти
5. Накопители на жестких дисках
9. Тестирование жестких дисков
10. Дефрагментация жесткого диска
11. Динамическое распределение памяти
12. Динамическое распределение памяти
15. Разработка программ с использованием динамической памяти
16. Историография Кубани ("Реликтовые интуиции памяти и исторические перпендикуляры")
18. Подсистема памяти современных компьютеров
26. Автоматизированная система распределения мест и оценок качества олимпиадных заданий
27. Память, виды памяти, методы тренировки памяти
28. Память. Виды памяти. Объем памяти
29. Моделирование распределения потенциала в МДП-структуре
30. Расчет распределения примесей в кремнии при кристаллизационной очистке и диффузионном легировании
31. Методы размещения и трассировки печатных плат на примере модуля памяти
32. Изучение законов нормального распределения и распределения Релея
33. Учет финансовых результатов и распределение прибыли
34. Теория распределения Д. Рикардо
35. Каналы распределения и товародвижения
36. Рациональное распределение ресурсов как один из важнейших аспектов системы финансового менеджмента
37. Формирование и распределение прибыли предприятия
41. История России в народной памяти
42. Сталинская система потребления и распределения
43. Создание первого в континентальной Европе компьютера с хранимой в памяти программой
44. Софійський собор - видатна памята доби Київської Русі
45. «Памяти матери» — лирический цикл А. Т. Твардовского
46. Тема памяти в поэзии А.Ахматовой и А.Галича
47. Лингвопоэтический анализ пьесы Н. Садур «Памяти Печорина»
48. Современные тенденции развития каналов распределения
49. Оценивание параметров и проверка гипотез о нормальном распределении
51. Ортогональные полиномы и кривые распределения вероятностей
52. Физиология (ФИЗИОЛОГИЯ ПАМЯТИ)
53. Распределение рабочего времени руководителей российских промышленных предприятий
57. Термодинамика и закон распределения
59. Структура адаптивного е-обучения на основе распределенной повторно используемой учебной деятельности
60. Структуры памяти
62. Способы управления и развития памяти
65. Индивидуальные различия в памяти людей
66. Развитие музыкальной и моторно-двигательной памяти через синтез искусств
67. Эволюция памяти и понятия времени
68. Проблемы памяти
69. Типы памяти
73. Теория распределения информации
74. Глава семьи: распределение ролей и способ выживания
75. Распределения осужденный к лишению свободу по ИТУ
76. Идеальный газ. Распределение Больцмана
78. Нормальный закон распределения
79. Реформация бухгалтерского баланса и распределение прибыли
80. Теория факторов производства и распределения факторных доходов
81. Рынок ресурсов и распределение доходов
82. Управление каналами распределения, синтез
84. Распределение зарплаты по наряду путем коэффициента заработка (приработка )
85. Формирование и распределение доходов предприятия. На примере предприятия ЗАО ТТП Орбита
89. Распределение гидрогеодинамических параметров
90. Государственный контроль ресурсной базы на основе мониторинга распределенного фонда недр
92. Озера, их типы и географическое распределение
93. Стандарты внешней флэш-памяти
94. Теория распределения информации
95. Управление распределенными ресурсами
96. Безопасность в распределенных системах
97. Распределенные вычисления на FreePascal под Windows
98. Написание БД «Распределение затрат аварийно-диспетчерской службы предприятия»