americopereira Posted January 8, 2013 at 09:52 AM Report #490110 Posted January 8, 2013 at 09:52 AM 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); }
HappyHippyHippo Posted January 8, 2013 at 10:12 AM Report #490111 Posted January 8, 2013 at 10:12 AM (edited) 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. Edited January 8, 2013 at 10:14 AM by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
americopereira Posted January 8, 2013 at 10:41 AM Author Report #490112 Posted January 8, 2013 at 10:41 AM Obrigado Happy, faz todo o sentido 👍
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now