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

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

Жанры

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. Дымовая трилогия
Фантастика:
ужасы и мистика
8.21
рейтинг книги
Дым и пепел

Цвета штандартов

Колодзейчак Томаш
1. Цвета штандартов
Фантастика:
научная фантастика
5.00
рейтинг книги
Цвета штандартов

Час дракона

Зайцев Михаил Георгиевич
1. Русский ниндзя
Детективы:
боевики
8.11
рейтинг книги
Час дракона

Принц и пилигрим (сборник)

Стюарт Мэри
Шедевры фантастики
Фантастика:
фэнтези
5.00
рейтинг книги
Принц и пилигрим (сборник)

Русская литература сегодня. Жизнь по понятиям

Чупринин Сергей
Русская литература сегодня
Документальная литература:
публицистика
5.00
рейтинг книги
Русская литература сегодня. Жизнь по понятиям

Крестом и булатом. Атака

Черкасов Дмитрий Сергеевич
8. Рокотов
Детективы:
боевики
7.83
рейтинг книги
Крестом и булатом. Атака

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Электрические тела

Харрисон Колин
Детективы:
прочие детективы
6.60
рейтинг книги
Электрические тела

На кону – жизнь

Колычев Владимир Григорьевич
3. Палач мафии
Детективы:
криминальные детективы
6.40
рейтинг книги
На кону – жизнь

Симбионты

Дивов Олег Игоревич
Фантастика:
научная фантастика
7.67
рейтинг книги
Симбионты

Катуков против Гудериана

Прудников Виктор
Сражения Великой Отечественной Войны
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Катуков против Гудериана

Фантастика и приключения. Том 1 (Сборник)

Пикуль Валентин Саввич
Фантастика:
научная фантастика
5.00
рейтинг книги
Фантастика и приключения. Том 1 (Сборник)

Страх

Рыбаков Анатолий Наумович
2. Дети Арбата
Проза:
историческая проза
9.49
рейтинг книги
Страх

Первый контакт

Живой Алексей Я.
1. Невидимые
Фантастика:
научная фантастика
5.00
рейтинг книги
Первый контакт