Марк Митчелл - Программирование для Linux. Профессиональный подход

Здесь есть возможность читать онлайн «Марк Митчелл - Программирование для Linux. Профессиональный подход» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2002, ISBN: 2002, Издательство: Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программирование для Linux. Профессиональный подход: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Программирование для Linux. Профессиональный подход»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга в основном посвящена программированию в среде GNU/Linux. Авторы применяют обучающий подход, последовательно излагая самые важные концепции и методики использования расширенных возможностей системы GNU/Linux в прикладных программах. Читатели научатся писать программы, к интерфейсу которых привыкли пользователи Linux; освоят такие технологии, как многозадачность, многопотоковое программирование, межзадачное взаимодействие и взаимодействие с аппаратными устройствами; смогут улучшить свои программы, сделав их быстрее, надежнее и безопаснее; поймут особенности системы GNU/Linux, ее ограничения, дополнительные возможности и специфические соглашения.
Книга предназначена для программистов, уже знакомых с языком С и имеющих базовый опыт работы в GNU/Linux.

Программирование для Linux. Профессиональный подход — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программирование для Linux. Профессиональный подход», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Калькулятор принимает однострочные постфиксные выражения [40] В постфиксной записи бинарный оператор ставится после операндов, а не между ними. Например, чтобы умножить 6 на 8, нужно записать 6 8 *. Чтобы умножить 6 на 8, а затем добавить 5, следует записать 6 8 * 5 +. и отображает значение каждого выражения:

% ./calculator

Please enter a postfix expression:

2 3 +

5

Please enter a postfix expression:

2 3 + 4 -

1

Калькулятор, реализованный в файле calculator.c, читает каждое выражение и сохраняет промежуточные результаты в стеке унарных чисел, реализованном в файле stack.c. Унарные числа представляются в стеке в виде связных списков.

А.3.2. Сбор профильной информации

Первый этап профилирования заключается в настройке исполняемого файла на сбор профильной информации. Для этого при компиляции и компоновке объектных файлов необходимо указывать флаг -pg. Рассмотрим, к примеру, такую последовательность команд:

% gcc -pg -c -o calculator.o calculator.c

% gcc -pg -c -o stack.o stack.c

% gcc -pg -c -o number.o number.c

% gcc -pg calculator.o stack.o number.o -o calculator

Здесь разрешается сбор информации о вызовах функций и времени их выполнения. Чтобы получать сведения о каждой выполняемой строке программы, укажите флаг -g. При наличии флага -aбудет подсчитываться количество итераций циклов.

На втором этапе требуется запустить программу. В процессе ее выполнения профильные данные накапливаются в файле gmon.out. Исследуются только те участки программы, которые действительно выполняются. Чтобы профильный файл был записан, программа должна завершиться нормальным образом.

А.3.3. Отображение профильных данных

Получив имя исполняемого файла, утилита gprofпроверяет файл gmon.outи отображает информацию о том, сколько времени заняло выполнение каждой функции. Давайте проанализируем ход выполнения операции 1787 × 13 - 1918 в нашей программе-калькуляторе, создав простой профиль .

Flat profile:

Each sample counts as 0.01 seconds.

% cumulative self self total

time seconds seconds calls ms/call ms/call name

26.07 1.76 1.76 20795463 0.00 0.00 decrement_number

24.44 3.41 1.65 1787 0.92 1.72 add

19.85 4.75 1.34 62413059 0.00 0.00 zerop

15.11 5.77 1.02 1792 0.57 2.05 destroy_number

14.37 6.74 0.97 20795463 0.00 0.00 add_one

0.15 6.75 0.01 1788 0.01 0.01 copy_number

0.00 6.75 0.00 1792 0.00 0.00 make_zero

0.00 6.75 0.00 11 0.00 0.00 empty_stack

Вычисление функции decrement_number()и всех вызываемых в ней функций заняло 26,07% общего времени выполнения программы. Эта функция вызывалась 20795463 раза. Каждый вызов выполнялся 0,00 с, т.е. столь малое время, что его не удалось замерить. Функция add()вызывалась 1787 раз, очевидно для вычисления произведения. Каждый проход по функции занимал 0,92 секунды. Функция copy_number()вызывалась почти столько же раз — 1788, но на ее выполнение ушло всего 0.15% общего времени работы программы. Иногда в отчете присутствуют функции mcount()и profil(), используемые профайлером.

В простом профиле отражается время, затраченное на выполнение каждой функции. Утилита gprofумеет также создавать схему вызовов, где показывается время, проведенное не только в каждой функции, но и во всех вызываемых в ее контексте дочерних функциях.

index % time self children called name

[1] 100.0 0.00 6.75 main [1]

0.00 6.75 2/2 apply_binary_function [2]

0.00 0.00 1/1792 destroy_number [4]

0.00 0.00 1/1 number_to_unsigned_int [10]

0.00 0.00 3/3 string_to_number [12]

0.00 0.00 3/5 push_stack [16]

0.00 0.00 1/1 create_stack [16]

0.00 0.00 1/11 empty_stack [14]

0.00 0.00 1/5 pop_stack [15]

0.00 0.00 1/1 clear_stack [17]

--------------------------------------

0.00 6.75 2/2 main [1]

[2] 100.0 0.00 6.75 2 apply_binary_function [2]

0.00 6.74 1/1 product [3)

0.00 0.01 4/1792 destroy_number [4]

0.00 0.00 1/1 subtract [11]

0.00 0.00 4/11 empty_stack [14]

0.00 0.00 4/5 pop_stack [15]

0.00 0.00 2/5 push_stack [16]

--------------------------------------

0.00 6.74 1/1 apply_binary_function [2]

[3] 99.6 0.00 6.74 1 product [3]

1.02 2.65 1767/1792 destroy_number [4]

1.65 1.43 1767/1767 add [5]

0.00 0.00 1760/62413059 zerop [7]

0.00 0.00 1/1792 make_zero [13]

В первой секции сообщается о том, что на выполнение функции main()и всех ее дочерних функций ушло 100% времени (6.75 секунд). Функцию main()вызвал некто : это означает, что профайлер не смог определить, как был осуществлен вызов. В функции main()дважды вызывалась функция apply_binary_function()(всего таких вызовов в программе было тоже два). В третьей секции сообщается о том, что выполнение функции product()и ее дочерних функций заняло 98% времени. Эта функция вызывалась только один раз из функции apply_binary_function().

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программирование для Linux. Профессиональный подход»

Представляем Вашему вниманию похожие книги на «Программирование для Linux. Профессиональный подход» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Программирование для Linux. Профессиональный подход»

Обсуждение, отзывы о книге «Программирование для Linux. Профессиональный подход» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x