C                         Linguagem Programação C                          SunRicardo Liyushiro ChikasawaRafael Stoffalett...
Tópicos•   Contexto Histórico•   Critérios de Avaliação•   Características•   Estruturas de um Programa•   Identificadores...
Tópicos•   Binding•   Compilador•   Processo de Compilação•   Ligação com Bibliotecas•   Registro de Ativação•   Otimizaçã...
Contexto Histórico•   3ª Geração : Desenvolvida no início dos    anos 1970•   Derivada BCPL (Linguagem de    Programação B...
Contexto Histórico      Linguagem C – LP 2011   5
Contexto Histórico      Linguagem C – LP 2011   6
Características•   Desenvolvimento em Unix : em ambientes unix    o uso de C é bastante vantajoso, pois C é o    linguagem...
Características•   Disponibilidade: é provalvemente a linguagem    mais difundida ao mundo , sendo provável que se    enco...
Estrutura de um Programa•   Um cabeçalho contendo as diretivas de    compiladores onde se definem o valor de    constantes...
Identificadores•   Um identificador deve iniciar por uma letra ou por    um “_” (underscore);•   A partir do segundo carac...
Variáveis•   Uma variável é uma posição de memória que    pode ser indentificada através de um nome, e é    usada para gua...
Variáveis•   Escopo de Variáveis    •   Variáveis locais:         •   são aquelas declaração dentro da função         •   ...
Variáveis•   Escopo de Variáveis    •   Globais         •   são aquelas reconhecidas pelo programa inteiro.         •   Po...
Variáveis•   Classes de Variáveis    •   extern        •   Especificador extern nas declarações de variáveis diz ao       ...
Variáveis•   Classes de Variáveis    •   register        •   Caracter e inteiros são armazenados nos Registradores da     ...
Operadores•   Operador Lógico•   Operador Aritmético                  Linguagem C – LP 2011   16
Tipos de Dados            Linguagem C – LP 2011   17
Tamanho de Tipos•   A linguagem C define uma variedade de tipos que    representam inteiros em diferentes intervalos      ...
Ponto Flutuante     double dot (double a[], double b[], int tam) {       int i;       double res = 0.0;       for (i=tam;i...
Caracteres•   Caracteres (letras e símbolos) são representados    usando-se uma codificação•   Codificação mais comum é a ...
Tipo Char•   Em C, o tipo char ocupa apenas 1 bytes•   Pode-se manipular um char com um valor    inteiro(int)             ...
Representação de Array•   C usa implementação bastante simples de arrays    •   Alocação contínua na memória•   Para um ti...
Representação de Array             Linguagem C – LP 2011   23
Array Multi - dimensionais•   Mesma forma de alocação e acesso ao elementos•    int a[3][2] → a é um array de três element...
Alocação de Array Aninhado•   Declaração T A[R][C]    •   R linhas, C colunas    •   Elemento do tipo T ocupa K bytes•   T...
Alocação de array na Pilha             Linguagem C – LP 2011   26
Structs          Linguagem C – LP 2011   27
Alocação Dinâmica de Memória int *ptr_a; ptr_a = malloc(sizeof(int)); ptr_a = 90; free(ptr_a);                 Linguagem C...
Estrutura de Controle de Fluxo•   Comando de Seleção    •   Forma do comando if:         •   if(<condição>) <comando>     ...
Estrutura de Controle de Fluxo•   Comando de Seleção    •   Forma do comando switch         •    switch( <condição> ) <com...
Estrutura de Controle de Fluxo•   Comando de Desvio    •   Linguagem C tem quatro comandos que realizam um        desvio i...
Ambiente Binding•   A interpretação de comandos e expressões , tais    como a =5 ou g(a+1), dependem do que denotam    os ...
Escopo Estático       •   Definição do subprograma       •   Tempo de compilação       •   Texto do programa   x          ...
Escopo Estático•   Ocultamento de Entidade em Blocos Alinhados            void main()            {                     int...
Escopo Dinâmico        •   Chamada do subprograma        •   Tempo de execução        •   Fluxo de controle do programasub...
Compilador     a=b+c*3                             Tabela       de Símbolos     Análise Léxica          #            id   ...
Compilador      =id1         +                                           Análise Semântica      Id2         *            i...
Compiladorgcc -fdump-tree-optimized <arquivo.c>           =                                                          Otimi...
Geração de Código Intermediário•   Cada posição de memória é tratada como um    registrador sequências de instruções possu...
Código Otimizado temp1 = id3 * 3.0 id1 = id2 + temp1             gcc -fdump-tree-optimized <arquivo.c>                    ...
Otimização de Código•   Procurar melhorar o código intermediário gerado    em termos:    •   Velocidade de execução    •  ...
Geração de Código•   Fase final da compilação que produz código    relocável ou assembly•   Posições de memórias são selec...
Processo de Compilação    hello.cPrograma fonte                            hello.i       pre-processador                  ...
hello.cPrograma fonte                            hello.i       pre-processador                         Programa fonte     ...
hello.cPrograma fonte                            hello.i       pre-processador                         Programa fonte     ...
hello.cPrograma fonte                            hello.i                                             Arquivo .o em       p...
hello.c                                                Arquivo .o emPrograma fonte                                   Lingu...
Processo de Compilação•   Pré-processador    •   No Primeiro Passo, o pré-processador mapea instruções        escritas num...
Processo de Compilação•   Pré-processador    •   Macro pode ser também definidas com o #define no        arquivo fonte ou ...
Processo de Compilação•   Pré-processador    •   Macro pode ser também utilizadas passando valor         •   -DVAR=VALOR  ...
Processo de Compilação•   Compilador    •   Pega código fonte pré-processado e o traduz em        instruções de linguagem ...
Ligação com Bibliotecas                                hello.c              bye.c                                (cc1,as) ...
Ligação com Bibliotecas                                hello.c              bye.c                                (cc1,as) ...
Ligação com Bibliotecas•   Dependências de bibliotecas compartilhadas: ldd    •   Verifica quais são e se a bibliotecas co...
Registro de Ativação             Linguagem C – LP 2011   55
Acesso ao Registro de Ativação             Linguagem C – LP 2011   56
Exemplo de variável local              Linguagem C – LP 2011   57
Outro Exemplo            Linguagem C – LP 2011   58
Níveis de Otimização•   Oferecidos pelo Gcc e Compilador Intel para lidar    com:    •   Tempo de compilação    •   Uso de...
Níveis de Otimização•   Escolhidos uma opção de linha de comando    •    -funroll-loops: Idependente das anteriores, habil...
Exemplo de Otimização  O código ao lado será testado  pelo compilador GCC e Intel e o  resultados serão obtidos.Onde: User...
Exemplo de Otimização•   -O0 (GCC)•   -O1 (GCC)•   -O2 (GCC)                Linguagem C – LP 2011   62
Exemplo de Otimização•   -O3 (GCC)•   -funroll-loops (GCC)•   -Os (GCC)                   Linguagem C – LP 2011   63
Exemplo de Otimização•   -O0 (Intel)•   -O1 (Intel)•   -O2 (Intel)                  Linguagem C – LP 2011   64
Exemplo de Otimização•   -O3 (Intel)•   -Os (Intel)                  Linguagem C – LP 2011   65
Conclusão do Exemplo   4  3,5   3  2,5   2                                           INTEL                                ...
Open MP•   Programação Paralela•   Suporta Multi-Plataforma•   Memória Compartilhada                  Linguagem C – LP 201...
Bibliografia•   http://www.ibm.com/developerworks/br/library/l-gcc4/•   http://www.tiobe.com/index.php/content/paperinfo/t...
Bibliografia•   SEBESTA, Linguagem de Programação, Bookman 5d•   LOUDEN. Compiladores, Princíos e Práticas, Thomson•   GAR...
Próximos SlideShares
Carregando em…5
×

Apresentação Linguagem C

2.304 visualizações

Publicada em

Apresentação da linguagem C

0 comentários
5 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.304
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
87
Comentários
0
Gostaram
5
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Apresentação Linguagem C

  1. 1. C Linguagem Programação C SunRicardo Liyushiro ChikasawaRafael Stoffalette João
  2. 2. Tópicos• Contexto Histórico• Critérios de Avaliação• Características• Estruturas de um Programa• Identificadores• Variáveis• Operadores• Tipos de Dados• Estrutura de Controle de Fluxo Linguagem C – LP 2011 2
  3. 3. Tópicos• Binding• Compilador• Processo de Compilação• Ligação com Bibliotecas• Registro de Ativação• Otimização• Bibliografia Linguagem C – LP 2011 3
  4. 4. Contexto Histórico• 3ª Geração : Desenvolvida no início dos anos 1970• Derivada BCPL (Linguagem de Programação Básica Combinada).Anos depois foi utilizada por Ken Thompson para desenvolver a B, que se tornaria a base para a C.• O sistema operacional UNIX foi desenvolvido quase inteiramente em C (tornando-o fácil de portar para diferentes máquinas). C é “baixo nível”, execução eficiente e leve. Linguagem C – LP 2011 4
  5. 5. Contexto Histórico Linguagem C – LP 2011 5
  6. 6. Contexto Histórico Linguagem C – LP 2011 6
  7. 7. Características• Desenvolvimento em Unix : em ambientes unix o uso de C é bastante vantajoso, pois C é o linguagem oficial em unix, possuindo ferramentas de desenvolvimento e depuração difíceis de se encontrar para outras linguagens• Flexibilidade: C não apresenta limitações inerentes que impeçam seu uso em quase qualquer área de aplicação, com quase qualquer técnica de programação• Eficiente: a Semântica de C é em muitos aspectos próximos ao “abaixo nível”, ou seja, muitas de sua contruções espelham diretamente aspectos de computadores tradicionais, permitindo facilmente um uso eficiente dos recursos da máquinasLP 2011 Linguagem C – 7
  8. 8. Características• Disponibilidade: é provalvemente a linguagem mais difundida ao mundo , sendo provável que se encontre pelo menos um compilador C razoável (que suporte pelo menos a versão padrão da linguagem e de suas bibliotecas), para qualquer máquina desejada.• Portabilidade: programa C são bastante dependentes da bibliotecas utilizadas e o porte de um programa C de uma plataforma para outra não é automático nem necessariamente fácil. Porém é possível, com mínimo de disciplina e organização , a escrita de programas facilmente portáveis. Linguagem C – LP 2011 8
  9. 9. Estrutura de um Programa• Um cabeçalho contendo as diretivas de compiladores onde se definem o valor de constantes simbólicas, declaração de variáveis globais, inclusão de bibliotecas, declaração de rotinas, etc;• Um bloco de instruções principal e outros blocos de rotinas;• Documentação do programa: comentários Linguagem C – LP 2011 9
  10. 10. Identificadores• Um identificador deve iniciar por uma letra ou por um “_” (underscore);• A partir do segundo caracter pode conter letras, números e underscore;• C é uma linguagem case-sensitive (nomes com letras maiúsculas diferentes de nomes com letras Minúsculas)• Palavras reservadas: Linguagem C – LP 2011 10
  11. 11. Variáveis• Uma variável é uma posição de memória que pode ser indentificada através de um nome, e é usada para guardar um valor. O conteúdo de uma variável pode ser alterado através de um comando de atribuição.• Todas as variáveis devem ser declaradas antes de ser usadas• Variáveis podem consistir em um ou mais nomes de identificadores separados por vírgula.• A declaração de variáveis pode ser feitas dentro de funções (variáveis locais), na definição de parâmetros das funções (parâmetros formais) e fora de todas as funções (variáveis globais) Linguagem C – LP 2011 11
  12. 12. Variáveis• Escopo de Variáveis • Variáveis locais: • são aquelas declaração dentro da função • Podem ser referênciadas por comandos que estão dentro do bloco no qual as variáveis foram declaradas. void func1(void) { int x; Variável local x = 10; } void func2(void) { int x; x = -199; Variável local (não tem } Relação com anterior) Linguagem C – LP 2011 12
  13. 13. Variáveis• Escopo de Variáveis • Globais • são aquelas reconhecidas pelo programa inteiro. • Pode ser usado por qualquer pedaço de código e guardam seus valores durante toda a execução do programa. #include <stdio.h> int cont; // Variável global void func1(void); void main (void) { cont = 100; func1(); } Linguagem C – LP 2011 13
  14. 14. Variáveis• Classes de Variáveis • extern • Especificador extern nas declarações de variáveis diz ao compilador que os tipos e nomes de variável que o seguem foram declarados em outro arquivo. • Deixa o compilador saber o tipo e o nome das variáveis globais sem realmente criar armazenamento para ela novamente. Quando o linker unir os módulos, todas as referências a variáveis externas são resolvidas. // Arquivo 1 // Arquivo 2 int x, y; extern int x, y; char ch; extern char ch; main (void) { : func22(void) { } x = y/10; } func1() { x = 123; Func23() { } y = 10; } 14 Linguagem C – LP 2011
  15. 15. Variáveis• Classes de Variáveis • register • Caracter e inteiros são armazenados nos Registradores da CPU ao invés da memória, onde as variáveis normais são armazenados • Só pode ser aplicado a variáveis locais. int_pwr(register int m, register int e) // "m" e "e" declaradas como register porque são usadas num laço { register int temp; temp = 1; for (; e; e--) temp = temp * m; return temp; } Linguagem C – LP 2011 15
  16. 16. Operadores• Operador Lógico• Operador Aritmético Linguagem C – LP 2011 16
  17. 17. Tipos de Dados Linguagem C – LP 2011 17
  18. 18. Tamanho de Tipos• A linguagem C define uma variedade de tipos que representam inteiros em diferentes intervalos • O número de bytes alocados depende do tamanho da palavra da máquina e do compilador • sizeof (T) retorna o número de bytes usado pelo tipo T Linguagem C – LP 2011 18
  19. 19. Ponto Flutuante double dot (double a[], double b[], int tam) { int i; double res = 0.0; for (i=tam;i>0;i--) res += a[i]*b[i]; return res; } poderia ser escrita em assembly como: dot: push %ebp mov %esp, %ebp mov 8(%ebp), %eax /* endereco de a[0] */ mov 12(%ebp), %edx /* endereco de b[0] */ fldz /* res = 0.0 */ mov 16(%ebp), %ecx /* i = tam */ fori: cmp $0, %ecx jle fim fldl (%eax) /* a[i] */ fldl (%edx) /* b[i] */ fmulp /* a[i]*b[i] */ faddp /* res += a[i]*b[i] */ add $8, %eax /* atualiza endereco de a[i] */ add $8, %edx /* atualiza endereco de b[i] */ dec %ecx /* atualiza i */ jmp fori fim: mov %ebp, %esp /* resultado ja esta na pilha! */ pop %ebp ret Linguagem C – LP 2011 19
  20. 20. Caracteres• Caracteres (letras e símbolos) são representados usando-se uma codificação• Codificação mais comum é a ASCII • Codificação 8 bits • Tabela mais completa em : http//www.asciitable.com Linguagem C – LP 2011 20
  21. 21. Tipo Char• Em C, o tipo char ocupa apenas 1 bytes• Pode-se manipular um char com um valor inteiro(int) char c; int val; ... if (c > ‘0’) ... ... val = c - ‘0’; ... val = c - ‘a’ + 10; ... Linguagem C – LP 2011 21
  22. 22. Representação de Array• C usa implementação bastante simples de arrays • Alocação contínua na memória• Para um tipo T e uma constante N, a declaração T a[N] aloca uma região contínua de memória com NxL bytes, onde L é o tamanho em bytes do tipo T (sizeof(T)) • sizeof(a) = sizeof (T) * N• Primeiro elemento (a[0]) corresponde ao menor endereço de memória Linguagem C – LP 2011 22
  23. 23. Representação de Array Linguagem C – LP 2011 23
  24. 24. Array Multi - dimensionais• Mesma forma de alocação e acesso ao elementos• int a[3][2] → a é um array de três elementos • Cada elementos de a é um array (2 elementos) • a é um array de array → e a é um ponteiro para um array • a[i] é um array → e é um ponteiro para inteiros• Cálculo do endereço de elemento a [i] [j] Linguagem C – LP 2011 24
  25. 25. Alocação de Array Aninhado• Declaração T A[R][C] • R linhas, C colunas • Elemento do tipo T ocupa K bytes• Tamanho do Array • R * C * K bytes• Ordenação por linha Linguagem C – LP 2011 25
  26. 26. Alocação de array na Pilha Linguagem C – LP 2011 26
  27. 27. Structs Linguagem C – LP 2011 27
  28. 28. Alocação Dinâmica de Memória int *ptr_a; ptr_a = malloc(sizeof(int)); ptr_a = 90; free(ptr_a); Linguagem C – LP 2011 28
  29. 29. Estrutura de Controle de Fluxo• Comando de Seleção • Forma do comando if: • if(<condição>) <comando> • if(<condição>) <comando> else <comando> Linguagem C – LP 2011 29
  30. 30. Estrutura de Controle de Fluxo• Comando de Seleção • Forma do comando switch • switch( <condição> ) <comando> • Forma do operador ternário: • <expressão1> ? <expressão2> : <expressão3>• Comando de Repetição • while(<expressão_de_controle>) {<comando>} • do{<comando>} while {<expressão_de_controle>} • for(<comad_inic>;<comand_controle>;<comand_passo>) {<comand>} Linguagem C – LP 2011 30
  31. 31. Estrutura de Controle de Fluxo• Comando de Desvio • Linguagem C tem quatro comandos que realizam um desvio incondicional : return , goto, break. • return<expressão> • goto<rótulo> . . <rótulo> • break:tem duas utilizações, a primeira para terminar um case em comando switch, ou para forçar o término imediato de um laço, evitando o teste condicional normal do laço • continue: em vez de formar o término, continue força que a próxima interação do laço, pulando qualquer código intermediário. Linguagem C – LP 2011 31
  32. 32. Ambiente Binding• A interpretação de comandos e expressões , tais como a =5 ou g(a+1), dependem do que denotam os identificadores utilizados nesses comandos e expressões.• Um ambiente é um conjunto de Binding• Cada binding tem um determinado escopo, isto é , a região do programa onde a entidade é visivel. int a =13; void f() { int b =a; int a = 2; b =b+a; } Linguagem C – LP 2011 32
  33. 33. Escopo Estático • Definição do subprograma • Tempo de compilação • Texto do programa x x x y y w z z w xBloco Monolítico Bloco Não Aninhados Bloco Aninhados Linguagem C – LP 2011 33
  34. 34. Escopo Estático• Ocultamento de Entidade em Blocos Alinhados void main() { int i=0; int x=10; while(i++<100) { float x=3.231; printf(“x=%f n”, x*i); } } Linguagem C – LP 2011 34
  35. 35. Escopo Dinâmico • Chamada do subprograma • Tempo de execução • Fluxo de controle do programasub(){ int x=1; •Baixa eficiência sub1() •Baixa legibilidade { •Problemas Acesso escreva(x); •Menor Confiabilidade } sub2() { int x=3; sub1(); } sub2(); sub1();} Linguagem C – LP 2011 35
  36. 36. Compilador a=b+c*3 Tabela de Símbolos Análise Léxica # id info 1 a teste1.c 2 bId1 = id2 + id3 * number 3 c = Análise Sintática id1 + Id2 * id3 Number Linguagem C – LP 2011 36
  37. 37. Compilador =id1 + Análise Semântica Id2 * id3 Number = id1 + Id2 * id3 Intoreal(3) Linguagem C – LP 2011 37
  38. 38. Compiladorgcc -fdump-tree-optimized <arquivo.c> = Otimização Código id1 + Intermediário Id2 * temp1 = id3 * 3.0 id3 Intoreal(3) id1 = id2 + temp1 Geração de Código Geração Código Alvo Intermediário MOV id3, R2 MUL #3.0, R2 temp1 = intoreal(3) MOV id2, R1 temp2 = id3 * temp1 ADD R2, R1 temp3 = id2 + temp2 MOV R1, id1 id1 = temp3gcc -fdump-tree-gimple <arquivo.c> Linguagem C – LP 2011 5/23/11 38 38
  39. 39. Geração de Código Intermediário• Cada posição de memória é tratada como um registrador sequências de instruções possuem no máximo três operandos• Possui assim um único operador além da atribuição precedência é resolvida através da ordem de execução• Posições temporárias são geradas e usadas para armazenar valores intermediários. Linguagem C – LP 2011 39
  40. 40. Código Otimizado temp1 = id3 * 3.0 id1 = id2 + temp1 gcc -fdump-tree-optimized <arquivo.c> Linguagem C – LP 2011 40
  41. 41. Otimização de Código• Procurar melhorar o código intermediário gerado em termos: • Velocidade de execução • Quantidade de armazenamento utilizado• É uma tarefa relativamente complexa que usualmente toma tempo significativo da compilação, entretanto algumas otimizações simples podem memorar muito o tempo de execução sem retardar demais a compilação. Linguagem C – LP 2011 41
  42. 42. Geração de Código• Fase final da compilação que produz código relocável ou assembly• Posições de memórias são selecionadas para cada um das variáveis usadas pelo programa• Um importante aspecto é a atribuição de variáveis para registradores do processador• Instruções do código intermediário são traduzidas em sequências específicas de instruções de máquinas.• Alguns compiladores procuram otimizar novamente o código final gerado Linguagem C – LP 2011 42
  43. 43. Processo de Compilação hello.cPrograma fonte hello.i pre-processador Programa fonte “expandido” hello.s Compilador Programa Assembly hello.o Assembler Objeto Linker Linguagem C – LP 2011 43
  44. 44. hello.cPrograma fonte hello.i pre-processador Programa fonte “expandido” hello.s Compilador Programa Assembly teste.o Assembler Objeto Linker Linguagem C – LP 2011 44
  45. 45. hello.cPrograma fonte hello.i pre-processador Programa fonte “expandido” hello.s Compilador Programa Assembly teste.o Assembler Objeto Linker Linguagem C – LP 2011 45
  46. 46. hello.cPrograma fonte hello.i Arquivo .o em pre-processador Programa fonte Linguagem “expandido” De máquina hello.s Compilador Programa Assembly hello.o Assembler Objeto Linker Visualizar o objeto Linguagem C – LP 2011 46
  47. 47. hello.c Arquivo .o emPrograma fonte Linguagem De máquina hello.i pre-processador Programa fonte “expandido” Executável hello.s Compilador Programa Assembly hello.o Assembler Objeto Linker Linguagem C – LP 2011 47
  48. 48. Processo de Compilação• Pré-processador • No Primeiro Passo, o pré-processador mapea instruções escritas numa linguagem de alto nível estendida, para instruções da linguagem de programação original. • Expande macros em arquivos fontes antes deles serem compilados • Quando um macro é definida, o pré-processador insere o código correspondente até comando #endif Linguagem C – LP 2011 48
  49. 49. Processo de Compilação• Pré-processador • Macro pode ser também definidas com o #define no arquivo fonte ou nos arquivos de cabeçalho Linguagem C – LP 2011 49
  50. 50. Processo de Compilação• Pré-processador • Macro pode ser também utilizadas passando valor • -DVAR=VALOR Linguagem C – LP 2011 50
  51. 51. Processo de Compilação• Compilador • Pega código fonte pré-processado e o traduz em instruções de linguagem de máquina, linguagem que o computador entende. Estas são guardadas num ficheiro á parte, chamando arquivo objeto e tem a extesão “.o” .• Linker • O arquivo objeto tem as instruções em linguagem máquina, o computador ainda não pode correr como um programa. Para isso precisa a combinação do arquivo objeto com as partes da biblioteca run-time fazendo finalmente a criação de um ficheiro executável . Linguagem C – LP 2011 51
  52. 52. Ligação com Bibliotecas hello.c bye.c (cc1,as) (cc1,as) libc.so hello.o bye.o Informações de relocação Linker (id) e tabela de símbolo Executável parcialmente p2 libc.so Ligado (em disco) Loder/Dynamic Linker Executável totalmente Ligado na memória Linguagem C – LP 2011 52
  53. 53. Ligação com Bibliotecas hello.c bye.c (cc1,as) (cc1,as) hello.o bye.o Informações Linker (id) de relocação e tabela de símbolo Executável parcialmente p2 libhello.so Ligado (em disco) Loder/Dynamic Linker Executável totalmente Ligado na memória Linguagem C – LP 2011 53
  54. 54. Ligação com Bibliotecas• Dependências de bibliotecas compartilhadas: ldd • Verifica quais são e se a bibliotecas compartilhadas necessárias já foram encontradas • Caso afirmativo, o caminho da biblioteca é apresentado – ldd <arquivo_executável>• Criar as bibliotecas compartilhadas • -shared – gcc -shared -o <biblioteca.so> <lista_arq_objetos> Linguagem C – LP 2011 54
  55. 55. Registro de Ativação Linguagem C – LP 2011 55
  56. 56. Acesso ao Registro de Ativação Linguagem C – LP 2011 56
  57. 57. Exemplo de variável local Linguagem C – LP 2011 57
  58. 58. Outro Exemplo Linguagem C – LP 2011 58
  59. 59. Níveis de Otimização• Oferecidos pelo Gcc e Compilador Intel para lidar com: • Tempo de compilação • Uso de memória • Compromisso entre velocidade e tamanho do executável.• Escolhidos uma opção de linha de comando • Formato: -ONÍVEL (Nível pode variar de 0 até 3) • -O0: não realiza otimização • -O1: realiza as formas mais comuns de otimizações que não requerem compromisso entre velocidade e tamanho • -O2: adiciona otimizações em relação ao O1 que incluem agendamento de instruções • -O3: adiciona otimizações em relação O2 que incluem inserção de funções e procedimento que aumentam velocidade mas aumentam o tamanho do código. 59 Linguagem C – LP 2011
  60. 60. Níveis de Otimização• Escolhidos uma opção de linha de comando • -funroll-loops: Idependente das anteriores, habilita a desenrolamento de laços • -Os: seleciona apenas otimizações que reduzem o tamanho de executável para plataforma com restrições de recursos Linguagem C – LP 2011 60
  61. 61. Exemplo de Otimização O código ao lado será testado pelo compilador GCC e Intel e o resultados serão obtidos.Onde: User: tempo de execução doprocessador em CPU Total: tempo total para execução doprograma incluindo tempo de esperapor CPU Sys: tempo esperando chamadasde sistema Linguagem C – LP 2011 61
  62. 62. Exemplo de Otimização• -O0 (GCC)• -O1 (GCC)• -O2 (GCC) Linguagem C – LP 2011 62
  63. 63. Exemplo de Otimização• -O3 (GCC)• -funroll-loops (GCC)• -Os (GCC) Linguagem C – LP 2011 63
  64. 64. Exemplo de Otimização• -O0 (Intel)• -O1 (Intel)• -O2 (Intel) Linguagem C – LP 2011 64
  65. 65. Exemplo de Otimização• -O3 (Intel)• -Os (Intel) Linguagem C – LP 2011 65
  66. 66. Conclusão do Exemplo 4 3,5 3 2,5 2 INTEL GCC 1,5 1 0,5 0 O0 O1 O2 O3 Os Linguagem C – LP 2011 66
  67. 67. Open MP• Programação Paralela• Suporta Multi-Plataforma• Memória Compartilhada Linguagem C – LP 2011 67
  68. 68. Bibliografia• http://www.ibm.com/developerworks/br/library/l-gcc4/• http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html• http://www.redhat.com/magazine/002dec04/features/gcc/#internal-org-gcc• http://gcc.gnu.org/wiki/HomePage http://blog.ksplice.com/tag/objdump/• http://www.inf.pucminas.br/professores/marciocampos/clp/• http://www.inf.puc-rio.br/~inf1018/2010.2/• http://www.cse.iitb.ac.in/~uday/courses/cs324-05/gccProjects/node4.html• http://homepages.dcc.ufmg.br/~fpereira/classes/dcc024/ementa/#lesson13• http://marcelino.com.sapo.pt/CMan/Chap5.htm• http://www.inf.pucrs.br/~pinho/PRGSWB/Ponteiros/ponteiros.html• http://intranet.deei.fct.ualg.pt/PI_flobo/teorica22.html• http://ces33.wikidot.com/gerenciamento-de-memoria• www.ceng.metu.edu.tr/courses/ceng242/documents/slides/binding.pdf• http://en.wikipedia.org/wiki/C_%28programming_language%29• http://www.cic.unb.br/~pedro/trabs/buffer_overflow.htm Linguagem C – LP 2011 68
  69. 69. Bibliografia• SEBESTA, Linguagem de Programação, Bookman 5d• LOUDEN. Compiladores, Princíos e Práticas, Thomson• GARCIA,R,E. Linguagem de Programação, Apresentação em Sala, Unesp-FCT• CAMOLESI, Compiladores, Apresentações em Sala, Unesp-FCT Linguagem C – LP 2011 69

×