2022-fall-computer-science

Практика

Разминка

  1. Создайте в своём репозитории 2022-polytech-%фамилия% пустой файл README.md в директории 02_compiler
  2. Сделайте коммит
  3. Добавьте пустой файл hello_world.cpp
  4. Сделайте коммит
  5. Напишите программу, которая выводит строку Hello World!
  6. Проверьте, что программа работает в сервисе https://www.onlinegdb.com
  7. Сделайте коммит
  8. Синхронизуйте репозиторий с GitHub

Задание

Работа с gcc

  1. Установите gcc
  2. Установите CMake
  3. Соберите программу, которую вы написали в разминке, проверьте, что она работает
  4. Сгенерируйте код ассемблера
  5. Сделайте коммит и синхронизируйте с GitHub
  6. Добавьте 2 файла func.h и func.cpp (сделайте код рабочим)
    // func.h
    void print();
    
// func.cpp
void print()
{
  // здесь вывод Hello World!
}
  1. Добавьте файл func.h в файл hello_world.cpp с помощью #include
  2. Используйте print(); вместо строки вывода в файле hello_world.cpp
  3. Соберите программу, проверьте, что она работает

Работа с cmake

  1. Напишите CMakeLists.txt файл для сборки проека выше
  2. Соберите программу, проверьте, что она работает
  3. Сделайте коммит и синхронизируйте с GitHub

Домашнее задание

  1. Создайте файл в отдельной директории с более сложной программой. Пока не важно, что внутри: просто скопируйте код в файл complex.cpp.
// complex.cpp
 #include <iostream>

 double power_n (double d, unsigned n)
 {
   double x = 1.0;

   for (int j = 1; j <= n; j++)
   {
       x *= d;
   }

   return x;
 }

 int main ()
 {
   double sum = 0.0;

   for (int i = 1; i <= 100000000; i++)
     {
       sum += power_n (i, i % 5);
     }

   std::cout << "sum=" << sum << std::endl;
   return 0;
 }
  1. Добавьте файл в репозиторий
  2. Скомпилирйте файл с разными уровнями оптимизации компилятора: -O0, -O1, -O2, -O3, -Os, -Ofast, -Og, -Oz (см. документацию)
  3. Измерьте время работы программы с помощью команды time (например: time ./a.out)
  4. Измерьте размер файла программы (например: ls -lh)
  5. Посмотрите внутренности файла программы с помощью инструмента objdump, который входит в пакет binutils (например: objdump -h a.out или objdump -s a.out), определите размер секции .text
  6. Напишите чем отличаются программы, скомпилированные с разными ключами компиляции в файл README.md в директории 02_compiler

Комментарии