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.
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?)
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.)
struct X1 { char c1; int i; char c2; };
struct X2 { int i; char c; };
struct X3 { int i; char c1; char c2; };
struct X4 { struct X2 x; char c; };
struct X5 { char c1; char c2; char c3; };
struct X6 { short s1; int i; char c[3]; short s2; };
union U1 { int i; char c[5]; };
union U2 { short s; char c[5]; };
Você pode usar este teste para verificar suas respostas...