Funções inline


Quando uma função é chamada, a execução do programa salta para o grupo de instruções constantes dessa função na memória. Encerrada a função, a execução do programa retorna para a linha de código seguinte àquela que chamou a função.

Esse trabalho de saltar para o conjunto de instruções onde se encontra definida a função e depois retornar para a linha de código seguinte à instrução chamadora à função denota um trabalho que ocupa certo espaço em memória, acarretando determinada quantidade de tempo para ser executada.

Para ganhar um pouco de tempo, podemos colocar a palavra-chave inline como primeira palavra do cabeçalho da definição de uma função, para que seja inserida uma cópia da função em todo lugar onde a mesma é chamada. Contudo esse procedimento só se justifica se a função chamada for muito pequena (uma ou duas linhas de instruções), pois nesses casos as instruções necessárias à chamada da função podem ocupar mais espaço na memória do que as instruções do seu próprio código.

Outro cuidado a ser tomado é que a definição (e não o protótipo apenas) da função deve anteceder à sua primeira chamada.

Não devemos esquecer que se uma função inline for chamada muitas vezes, a mesma quantia de vezes será realizada uma cópia de seu código no programa, o que poderá significar um aumento considerável no tamanho do executável.

O exemplo a seguir leva um Label no Form e é usado para devolver o valor da área de um retângulo:


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
inline int Area(int a, int b)
{
return(a * b);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Label1Click(TObject *Sender)
{
int x, y;
x = StrToInt(InputBox("Cálculo da área", "entre com o valor de um lado", ""));
y = StrToInt(InputBox("Cálculo da área", "entre com o valor do outro lado", ""));
Label1->Caption = (String)"Área = " + Area(x, y);
}
//---------------------------------------------------------------------------



anterior

indice

próxima


HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO