Ir para o conteúdo
americopereira

Problemas com struct

Mensagens Recomendadas

americopereira

Boas malta, tenho estado até a data a programar com o turbo c++ da borland e optei por começar a usar visual studeo.

deparei-me com o seguinte problema,

Porque é que o tamanho em bytes da estrutura ola é maior que a soma das variáveis que a compõem?

void teste()
{
struct ola{
char nome[17];
short flag;
};

char nome2[17];
short flag2;
int i1,i2,i3;

i1=sizeof(ola);
i2=sizeof(nome2);
i3=sizeof(flag2);


printf("sizeof struct : %2d\nsizeof nome2+flag2: %2d\n",i1,i2+i3);

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

a razão esta na maneira como podes guardar elementos em memória.

se lembrares que a menor unidade de memória é 1 byte, mas o endereçamento não funciona nesse resolução.

o mínimo é 4 bytes (um inteiro)

graficamente é isto que está a acontecer :

+--byte1--+--byte2--+--byte3--+--byte4--+
| nome[0] | nome[1] | nome[2] | nome[3] |
| nome[4] | nome[5] | nome[6] | nome[7] |
| nome[8] | nome[9] | nome[10]| nome[11]|
| nome[12]| nome[13]| nome[14]| nome[15]|
| nome[16]| <-----flag------> | padding |
+---------+-------------------+---------+

o padding/stuffing/packing é usado para alinhas as estruturas a endereços de 4 bytes

é essa a razão de programadores usarem sem problemas o inteiro para representar um booleano, algo que bastaria um char (1 byte). Isto claro, se não se fizer uma gestão de memória mais afincada.

Editado por HappyHippyHippo
  • Voto 1

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

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.