Jump to content
ionut.hulub

Simple C Challange

Recommended Posts

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 :(

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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...