Jump to content
ionut.hulub

Simple C Challange

Recommended Posts

Posted

Pentru un system pe 32 de biti presupunem ca db ocupa 4 bytes;

sizeof(group) va afisa marimea lui db x fiecare variabila din struct, pentru short[3] fiecare valoarea va avea tot marimea de 4 bytes.

Deci pentru aceasta marime am avea 36.

Posted

E interesanta problema. Daca le adunam pe toate, obtinem 25, dar programul va returna 32. Habar n-am de unde a adaugat 7 octeti.

Singura explicatie pe care o am e asemanatoare cu cea a lui nedo, doar ca fiecare tip va ocupa 8 octeti. Adica 3*char = 3, adaugam 5 si obtinem 8, 3*short = 6, adaugam 2 si obtinem 8, 2*int = 8 si nu mai adaugam nimic. Deja vedem ca trebuie sa adaugam 5+2 = 7 si ajungem la 32.

Oricum, e doar o speculatie, nu stiu raspunsul :(

Posted (edited)

LE: E din cauza felului in care sunt asezate variabilele pe stack. Aparent, nu sunt una dupa alta ci cu spatii de memorie intre ele. Spatiul asta difera si el se pare.

intradevar e din cauza la cum sunt asezate in memorie.

char'ul este pe 1 byte, si primele 2 charuri vor ocupa 2 bytes. sa zicem ca o sa le plaseze incapand de la zona de memorie 100 pana la 102.

logic ar fi ca urmatorul int sa ocupe de la 102 pana la 106, dar int'ul, ocupand 4 bytes, trebuie sa place de la o zona de memorie divizibila cu 4, asa ca la compilare se va lasa un offset de 2 bytes dupa char-uri, si intul o sa inceapa sa fie scris in memoria incepand cu zona 104.

o sa se mai lase un offset de 3 bytes dupa char c, unul de 2 bytes dupa short s[3]

programul o sa afiseze 32.

PS.

daca vreti sa intelegi mai bine cum sta treaba, creati voi nistre structuri si afisati adresa fiecarul element ca sa vedeti cum sunt pozitionate in memorie.

Edited by NemesisITSC
Posted
@NemesisTSC : depinde de arhitectura. Mie imi afiseaza 40. Dar sunt pe x64

se acord.

depinde atat de arhitectura cat si de compilator, dar pentru cei mai multi programatori charu e pe 1 byte, short pe 2, int pe 4 si double pe 8.

Posted
daca e pe 8 octeti atunci rezultatul este 8 x 9, 72.

Intr-un struct, toate variabilele ocupa cat cea mai mare variabila.

cred ca faci o confuzie.

probabil te gandesti la un union, structura in care toate variabilele impart aceeasi zone de memorie, egala cu dimensiunea celei mai mari variabile.

Posted

am facut mici experimente inainte sa dau raspunsul respectiv, cu structuri cu cate 2-3 membri si de acolo am ajuns la concluzia respectiva. AM citit apoi despre offsets si despre cum sunt stocate im memorie variabilele intr-un struct si am inteles de ce da 40 in cazul meu(x64) si 32 pe x86.

Guess there still is a lot for me to learn ....

We keep going.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...