INF1018 - Software Básico

Aulas de Laboratório

Laboratório 5 - Representação de Arrays e Structs

  1. Qual o tamanho (em bytes) dos arrays abaixo e como você acha que eles são armazenados em memória?

    int b[2];
    short a[2][3];
    
    Depois de responder, utilize uma main como abaixo para testar:
    int main (void) {
      int i,j;
      short a[2][3];
      int b[2];
    
      for (i=0;i<2;i++) {
        b[i] = i;
        for (j=0;j<3;j++)
          a[i][j] = 2+i-j;
      }
    
      printf ("b: \n");
      dump (b, sizeof(b));
      printf ("a: \n");
      dump (a, sizeof(a));
    
      return 0;
    }
    
    e veja o que a função dump (do lab2) mostra.


  2. Use a função dump para ver como a estrutura abaixo é armazenada:

    struct X {
      int a;
      int b;
      short c;
      int d;
    } x;
    
    Experimente inicializá-la com valores facilmente "reconhecíveis" na memória, como, por exemplo:
    struct X {
      int a;
      int b;
      short c;
      int d;
    } x = {0xa1a2a3a4, 0xb1b2b3b4, 0xc1c2, 0xd1d2d3d4};
    
    Imprima também o tamanho dessa estrutura (sizeof).

    (Sim, existe um "buraco". Você sabe explicá-lo?)


  3. Qual o tamanho, e como os tipos abaixo são organizados na memória? Use a função dump para conferir suas respostas.

    (A função dump deve ser usada apenas para conferência! Antes de usá-la escreva sua resposta.)

    1. struct X1 {
        char c1;
        int i;
        char c2;
      };
      
    2. struct X2 {
        int i;
        char c;
      };
      
    3. struct X3 {
        int i;
        char c1;
        char c2;
      };
      
    4. struct X4 {
        struct X2 x;
        char c;
      };
      
    5. struct X5 {
        char c1;
        char c2;
        char c3;
      };
      
    6. struct X6 {
        short s1;
        int i;
        char c[3];
        short s2;
      };
      
    7. union U1 {
        int i;
        char c[5];
      };
      
    8. union U2 {
        short s;
        char c[5];
      };
      

    Você pode usar este teste para verificar suas respostas...