Чтение онлайн

на главную - закладки

Жанры

Linux: Полное руководство

Аллен Питер В.

Шрифт:

 int i;

 /* генерируем задержку */

 for (i=0;i<9999999;i++) ;

 return 777;

}

double function(void) {

 int i;

 double x = 7.2323232323, y=324343.3434;

 /* генерируем задержку */

 for (i=0;i<9999999;i++) x/y;

 function2;

 return x/y;

}

int main {

 int i;

 double l;

 for (i=0;i<10;i++) {

printf("%d\b",i);

l=function;

 }

 return 0;

}

Как

видно из листинга, функция
function
вызывается 10 раз (см. поле calls). В свою очередь, она вызывает функцию
function2
, следовательно, число вызовов этой функции тоже равно 10. Функция
function
выполняется 1.09 секунд (self seconds), а так как ее никто не вызывает (кроме main), то поле
cumulative seconds
также равно 1.09. Функция
function2
работает 1.07 секунд, но ее вызывает функция
function
, которая работает 1.09 секунд. Следовательно, поле
cumulative seconds
для второй функции равно 1,09+1.07=2.16. Поле
self ms/call
эквивалентно полю
self seconds
, только его величина представлена в миллисекундах. Поле
total ms/call
обратно полю
cumulative call
и содержит время выполнения этой функции и всех дочерних функций, в то время как поле
cumulative call
содержит время этой функции и всех родительских.

22.5.2. Как оптимизировать программу

В качестве оптимизации программы могу вам порекомендовать предпринять следующие действия:

1. Запустите профайлер, и пусть он определит время работы всех функций.

2. Перепишите функцию (или функции), которые занимают больше всего процессорного времени. Возможно, вам придется изменить алгоритм работы этих функций.

3. Когда алгоритм изменить невозможно, можно попытаться переписать часть кода функции на языке ассемблера, если, конечно, это не противоречит идеологии вашей программы (возможно, вы хотите, чтобы она запускалась на как можно большем количестве разных платформ — тут без С не обойтись). Если переработка функции невозможна или помогла мало, то попробуйте оптимизировать программу с помощью опций компилятора. Прежде всего выключите отладочную информацию (не указывайте опцию —g) — и размер программы станет меньше. Используйте одну из опций оптимизации -O.

Глава 23

Разработка графического приложения: библиотека GTK+

Сейчас мы поговорим о создании графического интерфейса для вашей Linux-программы. Как вы знаете, средствами одного С нормальный GUI не построишь, тем более что привычный пользователь Windows очень требователен не просто к наличию GUI, но и к дизайну формы (окна программы). Поэтому без дополнительных библиотек вам не обойтись. Самыми распространенными библиотеками для создания GUI являются библиотеки GTK+ и Qt. Рекомендуется использовать только эти библиотеки, поскольку велика вероятность того, что они уже будут установлены у пользователя (уж GNOME и KDE есть почти у всех). Рассмотрим подробно библиотеку GTK+, поскольку она, на мой взгляд, проще, чем Qt.

Скорее всего, GTK+ у вас уже установлена, но вам понадобится дополнительно установить пакет gtk+-devel, содержащий необходимые файлы для разработки GTK-программ.

23.1. Введение в GTK+

Первоначально библиотека GTK+ (далее GTK) была разработана для использования программой GIMP, отсюда и название —The GIMP Toolkit. Со временем библиотека стала использоваться для разработки других приложений для среды GNOME. Сейчас GTK — это объектно-ориентированный и кросс-платформенный инструмент для создания графического интерфейса приложений, причем созданные с использованием GTK приложения независимы от среды GNOME. Ваше приложение, написанное на GTK, будет отлично работать в KDE или любой другой среде — главное, чтобы библиотека GTK была установлена на компьютере.

Сама библиотека GTK+ стоит на трех китах:

♦ Библиотека Glib — предназначена для оперирования с различными типами данных. Данная библиотека будет полезной для разработки любых приложений, даже не GTK. Эта же библиотека содержит функции для работы с памятью и для

обработки ошибок. О типах данных библиотеки Glib мы поговорим позже.

♦ Библиотека GDK (The GIMP Drawing Kit) — библиотека низкого уровня, ее функции взаимодействуют с функциями оконной системы (X Window). Используется для построения графических примитивов.

♦ Библиотека GTK — используется для создания графического интерфейса

23.2. Библиотека Glib

23.2.1. Стандартные типы данных библиотеки Glib

Библиотека Glib содержит типы данных, аналогичные типам данных языка С, а также такие структуры, как деревья, списки; функции для работы с памятью и обработки ошибок. Это сделано для того, чтобы ваше приложение могло быть легко портировано на другую платформу. Например, на одних компьютерах тип int может быть 32-разрядным, а на других — 64-разрядным (это зависит от архитектуры центрального процессора), А если вы используете тип gint, объявленный в библиотеке Glib, то можете дальше разрабатывать свое приложение и не беспокоиться о том, как оно будет работать на RISC-машине под управлением Windows NT. В таблице 23.1 перечислены типы данных библиотеки GLib, которые соответствуют типам данных С.

Таблица соответствия типов данных Glib и С Таблица 23.1

Тип данных С Тип данных Glib
char gchar
short gshort
long glong
int gint
bool gboolean
unsigned char guchar
unsigned short gushort
unsigned long gulong
unsigned int guint
float gfloat
double gdouble
long double gldouble
void* gpointer

Для использования этих типов данных, как и прочих возможностей библиотеки Glib, необходимо подключить заголовочный файл glib.h.

23.2.2. Функции для работы с памятью

Функции для работы с памятью библиотеки Glib выполняют те же действия, что и соответствующие им функции языка С. Вот их прототипы:

gpointer g_malloc(gulong size);

gpointer g_realloc(gpointer mem, gulong size);

void g_free(gpointer mem);

23.2.3. Строки и Glib

Библиотека Glib содержит довольно много функций для работы со строками, но я перечислю лишь самые с моей точки зрения интересные (таблица 23.2).

Некоторые строковые функции библиотеки Glib Таблица 23.2

Прототип Описание
gchar* g_strchug(gchar* s) Функция удаляет все пробелы в строке s, стоящие в начале строки (до первого печатного символа). Данная функция может пригодиться для контроля введенной пользователем информации
gchar* g_strchomp(gchar* s) Функций удаляет все пробелы в строке s, стоящие в конце строки
gchar* g_strstrip(gchar* s) Функция удаляет пробелы а начале и в конце строки
void g_strdown(gchar* s) Функция переводит все буквы строки s в нижний регистр
void g_strup(gchar* s) Функция переводит все буквы строки s в верхний регистр
void g_strreverse(gchar* s) Функция преобразовывает прописные буквы в строчные и наоборот
Поделиться:
Популярные книги

Бояръ-Аниме. Романов. Том 3

Кощеев Владимир
2. Романов
Фантастика:
фэнтези
альтернативная история
6.57
рейтинг книги
Бояръ-Аниме. Романов. Том 3

Лекарь Империи 2

Карелин Сергей Витальевич
2. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.00
рейтинг книги
Лекарь Империи 2

Легат

Прокофьев Роман Юрьевич
6. Стеллар
Фантастика:
боевая фантастика
рпг
6.73
рейтинг книги
Легат

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Изменяющий-Механик. Компиляция. Книги 1-18

Усманов Хайдарали
Собрание сочинений
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Изменяющий-Механик. Компиляция. Книги 1-18

Инженер Петра Великого 2

Гросов Виктор
2. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Инженер Петра Великого 2

Тринадцатый IV

NikL
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Тринадцатый IV

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Зеркало силы

Кас Маркус
3. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Зеркало силы

Изгои

Владимиров Денис
5. Глэрд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Изгои

На обочине 40 плюс. Кляча не для принца

Трофимова Любовь
Проза:
современная проза
5.00
рейтинг книги
На обочине 40 плюс. Кляча не для принца

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Моров. Том 3

Кощеев Владимир
2. Моров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Моров. Том 3

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX