Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

seuqram

[Resolvido] Tamanho de uma estrutura com um int e um char

Mensagens Recomendadas

seuqram    8
seuqram

#include <iostream>

using namespace std;

struct Char
{
  char c;
};

struct Int
{
  int i;
};

struct Int_Char
{
  int i;
  char c;
};

int main()
{
  cout << sizeof(Char) << endl;
  cout << sizeof(Int) << endl;
  cout << sizeof(Int_Char) << endl; //?
  while(1){}
}

//Output:
//1
//4
//8

Não estou a perceber porque é que a estrutura "Int_Char" têm 8 bytes, o esperado não seria 5?

Editado por seuqram

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
seuqram    8
seuqram

Já sei a resposta para o meu problema. Para alguém que não saiba e esteja interessado:

É um processo de otimização em que em vez de se ter os dados assim:

Screenshot_1.jpg?noCache=1464371751

Espalham-se os dados assim:

Screenshot_2.jpg?noCache=1464371787

O que é melhor para o performance.

Screenshot_3.jpg?noCache=1464371817

Como eu tenho na pergunta inicial, um char sozinho é igual a 1byte (8bits).

Mas quando eu junto um inteiro, em vez de se misturarem os dados dentro do mesmo bloco de 4bytes e de um quarto da parte do bloco seguinte,

devidem-se em dois blocos diferentes. É por isso que a minha estrutura "Int_Char" têm 8Bytes.

Isto aumenta o tamanho mas também aumenta a rapidez que o processador procura os elementos.

Editado por seuqram
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1153
HappyHippyHippo

é pena que o C não tenha 2 bytes, tornaria o exmeplo mais completo.

no entanto, é bom saber que conseguiste descobrir sozinho a razão do padding.

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger    50
Flinger

Já agora um aparte, só para complementar a tua informação.

Esse padding (ou alinhamento) é dependente do processador e do compilador. Isto significa que não podes contar que a tua estrutura vá ter o mesmo tamanho em todas as plataformas e em todos os compiladores.

Isto faz com que o envio de estruturas binárias através de streams (sockets p ex.) seja traiçoeiro quando do outro lado pode estar uma máquina com um processador com uma arquitectura diferente.

Editado por Flinger
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.