Ola pessoal, esse pequeno post e para falar sobre compilacao com otimizacao do compilador. Para isso vamos medir o tempo de execucao de nosso programa.Usei o exemplo do post anterior, de qualquer forma segue o codigo abaixo:#include #include double tempo(){ struct timeval tv; gettimeofday(&tv,0); return tv.tv_sec + tv.tv_usec/1e6;}int main(){ double t1,t2; double i; t1 = tempo(); printf("%lf\t",t1); for(i=0;i<300000000;i++); t2 = tempo(); printf("%lf\t",t2); printf("%lf\n",t2-t1); return 0;}Na hora de compilar um programa com o GCC voce pode colocar alguns parametros, vamos usar:-O1 Otimiza para tamanho do binario-O2 Otimiza para desempenho de execucao-O3 Otimiza para Data cache* Atencao e "O" (letra) e nao "0" (numero).Vamos aos testes:[helton2@hrpc ~]$ gcc teste.c -O1[helton2@hrpc ~]$ ./a.out1243797632.612002 1243797633.767017 1.155015Neste exemplo o tamanho do binario ficou em 6329 bytes e demorou 1.155 segundos.[helton2@hrpc ~]$ gcc teste.c -O2[helton2@hrpc ~]$ ./a.out1243797643.222072 1243797644.371347 1.149275Neste exemplo o tamanho do binario ficou em 6345 bytes e demorou 1.149 segundos.[helton2@hrpc ~]$ gcc teste.c -O3[helton2@hrpc ~]$ ./a.out1243797650.764788 1243797651.959029 1.194241Neste exemplo o tamanho do binario ficou em 6409 bytes e demorou 1.194 segundos.Compilando da forma padrao ...[helton2@hrpc ~]$ gcc teste.c[helton2@hrpc ~]$ ./a.out1243797667.095339 1243797670.080635 2.985296Neste exemplo o tamanho do binario ficou em 6369 bytes e demorou 2.985 segundos.Como aqui estamos tratando de um problema facil, apenas um simples "for" a diferenca e pequena, mas com problemas mais complexos, sem duvida essas opcoes de compilacao podem dar um "up" no seu programa.As opcoes aqui abordadas sao validas para a maioria dos compiladores C e C++ tanto em ambiente unix, linux, mac e windows.Dica de Claudio Schepke. Obrigado! Ola galera do ICC!!!Estamos de volta e com conteudo muito divertido, esta semana tirei para estudar um pouco sobre listas em C e e muito legal. Bom para comecar, sempre que queremos guardar um grupo de dados podemos utilizar vetores ou matrizes, isso faz com que voce utilize um espaco contiguo na memoria, que mesmo com alocacao dinamica de memoria vai necessariamente ser sequencial, entao podemos acessar qualquer elemento do vetor passando apenas o ponteiro para o primeiro elemento. Ate neste ponto tudo bem, mas um vetor nao e uma estrutura muito flexivel, e necessario definir um tamanho maximo para ele, mesmo usando alocacao dinamica para definir/alterar o tamanho do vetor isso acaba custando caro em relacao a processamento e uso da regiao da memoria livre reservada para execucao do programa (Heap). Isso pode gerar muitos problemas como estouros de memoria ao tentar inserir mais um elemento em um vetor cheio (Overflow) ou entao Buffer Underflow ao tentar ler um vetor vazio.Para resolver estes problemas foram criadas as listas encadeadas, sao nada mais do que uma estrura de dados com elementos ordenados do mesmo tipo. Elas podem ter o formato de filas ou pilhas, nas filas os dados sao inseridos em uma estremidade e retirados na outra, conhecido como FIFO (First In, First Out) e nas pilhas os dados que sao inseridos por ultimo sao retirados primeiro, conhecido como LIFO (Last In, First Out). Uma lista encadeada pode ser inicializada sem nenhum valor e a medida que vamos inserindo elementos nela vamos alocando memoria dinamicamente, assim o risco de faltar memoria diminui pois