Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux: ПолноС руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 127

Автор ДСнис ΠšΠΎΠ»ΠΈΡΠ½ΠΈΡ‡Π΅Π½ΠΊΠΎ

Π’Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сСбС ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ такая малСнькая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΠ°:

Листинг 22.2. Π€Π°ΠΉΠ» prog.с

#include <stdio.h>


int main() {

 printf("Hello\n");

 return 0;

}

ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (gcc -o prog prog.c) ΠΈ запуститС strace:

$ strace prog

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

execve("./a.out", ["./Π°.out"], [/* 21 vars */]) = 0

uname((sys="Linux", node="localhost.localdomain", ...}) = 0

brk(0) = 0x80495b4

open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)

open("/etc/ld.so.cache", O_RDONLY) = 7

fstat64(7, {st_mode=S_IFREG|0644, st_size=31578, ...}) = 0

old_mmap(NULL, 31578, PROT_READ, MAP_PRIVATE, 7, 0) = 0x40014000

close(7) = 0

open("/lib/i686/libc.so.6", O_RDONLY) =7

read(7, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`u\1Π’4\0"..., 1024) = 1024

fstat64(7, {st_mode=S_IFREG|0755, st_size=1401027, ...}) = 0

old_mmap(0x42000000, 1264928, PROT_READ|PROT_EXEC, MAP_PRIVATE, 7, 0) = 0x42000000

mprotect(0x4212c000, 36128, PROT_NONE) = 0

old_mmap(0x4212c000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0x12c000) = 0x4212c000

old_mmap(0x42131000, 15648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x42131000

close(7) = 0

munmap(0x40014000, 31578) = 0

brk(0) = 0x80495b4

brk(0x80495e4) = 0x80495e4

brk(0x804a000) = 0x804a000

fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000

write(1, "Hello\n", 6) =6

munmap(0x40014000, 4096) = 0

_exit(0) = ?

Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

имя систСмного Π²Ρ‹Π·ΠΎΠ²Π° = Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π’ нашСм случаС ΠΌΡ‹ Π²Ρ‹Π²Π΅Π»ΠΈ Π½Π° консоль ΡˆΠ΅ΡΡ‚ΡŒ символов, поэтому Π²Ρ‹Π·ΠΎΠ² write() Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 6.

Π’ случаС, Ссли систСмный Π²Ρ‹Π·ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠ΄ ошибки -1), ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° strace Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ описаниС ошибки:

open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ константы выводятся Π² ΠΈΡ… символьном прСдставлСнии:

open("file.dat", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3

Π‘ΠΈΠ³Π½Π°Π»Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ выводятся Π² символьном прСдставлСнии, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

sigsuspend([] <unfinished ...>

--- SIGINT (Interrupt) ---

+++ killed by SIGINT +++

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹, Ρ‚ΠΎΡ‡Π½Π΅Π΅ Ρ‡Π»Π΅Π½Ρ‹ структур, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΈ выводятся Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ имя_Ρ‡Π»Π΅Π½Π°=Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

lstat("/dev/null", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) =0

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ строки Π² Π‘, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡ… значСния Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ:

read(3, "root::0:0:System Administrator:/"..., 1024) = 422

22.5. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ gprof

Π’Π°ΡˆΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ? Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° кроСтся Π² нСэффСктивном, ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Ρ†Π΅Π»ΠΎΠΌ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°ΠΌΠΈ. Π’ вашСм дистрибутивС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ΠΎΠ² gprof, prof, profiler.

БСйчас ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ gprof (The GNU Profiler), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставлСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 22.3.


ΠšΠ»ΡŽΡ‡ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки gprof Π’Π°Π±Π»ΠΈΡ†Π° 22.3

ΠšΠ»ΡŽΡ‡ НазначСниС -Π° He Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ статичСских функциях -b НС Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ описаниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ -с Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ эвристичСский Π°Π½Π°Π»ΠΈΠ· тСкстового сСгмСнта ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с Ρ†Π΅Π»ΡŒΡŽ создания статичСского Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² -e имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ На Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠ±ΠΎ всСх функциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π΅Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ -E имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ НС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ -f имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ± ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠ±ΠΎ всСх функциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π΅Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ -F имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π΅Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ -k func1 func2 НС Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ func2 ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ func1 -s Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° gmon.sum -z ВывСсти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ процСссорным Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ

22.5.1. ИспользованиС ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°

Для использования ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ компилятора -pg ΠΈ Π±Π΅Π· ΠΎΠΏΡ†ΠΈΠΈ -ΠΎ. Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ„Π°ΠΉΠ»ΠΎΠΌ a.out. ПослС этого запуститС Ρ„Π°ΠΉΠ» a.out, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ создал Ρ„Π°ΠΉΠ» gmon.out. Π’Π΅ΠΏΠ΅Ρ€ΡŒ запуститС ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ --nograph:

$ gcc -pg 1.с

$ ./Π°.out

$ gprof -b –no-graph

Π‘Π΅Π· ΠΊΠ»ΡŽΡ‡Π° -b ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ описаниС ΠΏΠΎΠ»Π΅ΠΉ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

♦ Time: врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠΌ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ;

♦ cumulative seconds: сумма числа сСкунд этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ;

♦ self seconds: число сСкунд, ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ;

♦ Calls: число Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²;

♦ self ms/calls: количСство миллисСкунд, Π½Π° протяТСнии ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… функция Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ;

♦ total ms/calls: количСство сСкунд, Π½Π° протяТСнии ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ функция ΠΈ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ;

♦ name: имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Рис. 22.5. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° gprof

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятно, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅, рассмотрим листинг 22.3.

Листинг 22.3. ДСмонстрационная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

#include <stdio.h>


int function2() {

 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.