Начинающим программистам, работающим на языке С, довольно трудно понять, что такое указатели. Разобраться с ними можно путем сравнения ассемблерного кода, использующего массивы и индексы массивов, с ассемблерным кодом, использующим указатели. В этом разделе показаны версии на языке С и на языке ассемблера MIPS двух процедур для очистки последовательности слов в памяти: в одной из них используются индексы массива, а в другой указатели. 13 листинге 2.6 показаны две процедуры на языке С.
Также вам может показаться, что такая тема как http://tehnar.ru/Catalog/21516a4e-4034-11e1-fb9f-0011951d270a/c01c2ee6-e6c9-4426-8dde-ffaff32fb8c8 никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт tehnar.ru. Тема винт с потайной головкой там представлена весьма широко. На том сайте можно узнать много интересного на тему винт с потайной головкой. Что означает вообще тема винт с потайной головкой, где найти винт с потайной головкой - про это написано на сайте tehnar.ru. Это очень важная для многих людей тема - винт с потайной головкой. Спасибо сайту tehnar.ru за информацию на тему винт с потайной головкой.
Цель этого раздела — показать, как указатели отображаются и при этом отойти от устаревшего стиля программирования. В конце раздела будет показано влияние современной оптимизации в процессе компиляции этих двух процедур.
Процедура dearl использует индексы, а процедура clear2 использует указатели. Вторая процедура для тех, кто не знаком с языком С, нуждается в некотором пояснении. Адрес переменной обозначается символом &. а на объект указывает указатель, обозначаемый символом .
В объявлении указывается, что массив array и указатель р являются указателями на целые числа, Первая часть цикла for в процедуре dear2 присваивает адрес первого элемента массива указателю р. Вторая часть цикла for проверяет, не указывает ли указатель за пределы последнего элемента массива. Увеличение значения указателя на единицу в последней части цикла for означает перемещение указателя к следующему объекту в последовательности согласно объявленному размеру. Поскольку р является указателем на целые числа, компилятор генерирует MIPS-инструкции для увеличения р на четыре, то есть на количество байтов в целом числе MIPS.
В версии, показанной слева, «умножение» и сложение должны быть внутри цикла, поскольку значение переменной 1 увеличивается на единицу, и под новое значение индекса нужно заново вычислять каждый адрес. Версия с указателем ячейки памяти, показанная справа, проводит непосредственное приращение указателя р. Вышеупомянутые операции в этой версии вынесены за пределы цикла, что позволило уменьшить количество инструкций, выполняемых при каждом проходе цикла, с шести до четырех. Эта ручная оптимизация соответствует оптимизации во время компиляции, направленной на упрощение выражения и исключение индукционных переменных.
Уточнение. Как уже ранее упоминалось, компилятор С добавит проверку, позволяющую убедиться, что значение переменной size больше нуля. Одним из способов может быть добавление непосредственно перед первой инструкцией цикла перехода к инструкции sit.
Представление о производительности программ
Для получения при работе с языком С более высокой производительности, чем при работе с массивами, нужно освоить применение указателей: «Используйте указатели даже в том случае, если не можете понять, как работает код». Современные оптимизирующие компиляторы могут создавать сопоставимый по качеству код и для версии с массивом. Сегодня многие программисты предпочитают всю тяжелую работу перекладывать на компиляторы,
Опубликовал katy
June 26 2015 07:45:51 ·
0 Комментариев ·
2883 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.