Генерация высококачественного кода для программ, написанных на СИ - [15]
> else
> k5 = i5 + i2;
>
>
/* ------------------------------------------------ *
¦ Проверка того, как компилятор генерирует адрес ¦
¦ переменной с константным индексом, размножает ¦
¦ копии и регистры ¦
* ------------------------------------------------ */
>
> ivector[ 0 ] = 1;
/* генерация константного адреса */
> ivector[ i2 ] = 2;
/* значение i2 должно быть скопировано*/
> ivector[ i2 ] = 2;
/* копирование регистров */
> ivector[ 2 ] = 3;
/* генарация константного адреса */
>
>
>
/* ----------------------------- *
¦ Удаление общих подвыражений ¦
* ----------------------------- */
> if(( h3 + k3 ) < 0 || ( h3 + k3 ) > 5 )
> printf("Common subexpression elimination
\n>");
> else {
> m3 = ( h3 + k3 ) / i3;
> g3 = i3 + (h3 + k3);
>
>
/* -------------------------------------- *
¦ Вынесение инвариантного кода ¦
¦ (j * k) может быть вынесено из цикла ¦
* -------------------------------------- */
>
> for( i4 = 0; i4 <= max_vector; i4++)
> ivector2[ i4 ] = j * k;
>
>
/* ----------------------------- *
¦ Вызов функции с аргументами ¦
* ----------------------------- */
>
> dead_code( 1, "This line should not be printed" );
>
>
/* ------------------------------ *
¦ Вызов функции без аргументов ¦
* ------------------------------ */
>
> unnecessary_loop();
>
> }
/* Конец функции main */
>
>
/* ------------------------------------------------------ *
¦ Функция: dead_code ¦
¦ Проверка недостижимого кода и лишних ¦
¦ присваиваний. Не должен генерироваться код. ¦
* ------------------------------------------------------ */
>
>void dead_code( a, b )
> int a;
> char *b;
> {
> int idead_store;
>
> idead_store = a;
> if( 0 )
> printf( "%s
\n>", b );
> }
/* Конец dead_code */
>
>
/* ---------------------------------------------------- *
¦ Функция: unnecessary_loop ¦
¦ Цикл в следующей функции ненужен, так как ¦
¦ значение присваивания постоянно. В идеале ¦
¦ цикл должен быть удален. ¦
* ---------------------------------------------------- */
>void unnecessary_loop()
> {
> int x;
>
> x = 0;
> for( i = 0; i < 5; i++ )
/* Цикл не должен генерироваться*/
> k5 = x + j5;
> }
/* Конец unnecessary_loop */
>
/* ---------------------------------------------------- *
¦ Функция: loop_jamming ¦
¦ Два цикла в этой функции имеют одинаковые ¦
¦ заголовки и могут быть слиты в один. ¦
* ---------------------------------------------------- */
>void loop_jamming( x )
> int x;
> {
> for( i = 0; i < 5; i++ )
> k5 = x + j5 * i;
> for( i = 0; i < 5; i++ )
> i5 = x * k5 * i;
> }
/* Конец loop_jamming */
>
/* ------------------------------------------------------ *
¦ Функция: loop_unrolling ¦
¦ Цикл в этой функции должен быть заменен ¦
¦ тремя присваиваниями с использованием ¦
¦ константной индексации массива или машинно- ¦
¦ зависимыми командами для инициализации ¦
¦ блока памяти. ¦
* ------------------------------------------------------ */
>void loop_unrolling( x )
> int x;
> {
> for( i = 0; i < 6; i++ )
> ivector4[ i ] = 0;
> }
/* Конец loop_unrolling */
>
/* ----------------------------------------------------- *
¦ Функция: jump_compression ¦
¦ Эта программа полезна для демонстрации ¦
¦ сжатия цепочки переходов. goto end_1 может ¦
¦ быть заменен на прямой переход на beg_1. ¦
* ----------------------------------------------------- */
>int jump_compression( i, j, k, l, m )
>int i, j, k, l, m;
> {
>beg_1:
> if( i < j )
> if( j < k )
> if( k < l )
> if( l < m )
> l += m;
> else
> goto end_1;
> else
> k += l;
> else {
> j += k;
>end_1:
> goto beg_1;
> }
> else
> i += j;
> return( i + j + k + l + m );
> }
/* Конец jump_compression */
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.