Kezdőoldal » Számítástechnika » Programozás » Hogy lehet kiszámolni c-ben...

Hogy lehet kiszámolni c-ben hogy pl egy struktúra mennyi helyet foglal?

Figyelt kérdés
Első félévem szóval csak egyszerűen légyszi. Olyan kérdés lehet pl hogy hány bájtot foglal a struct{int a:2; int b:4;int c: 3} ha sizeof int értéke 4? Itt 4 a válasz amit el is tudok fogadni de mi van ha nem csak intek vannak benne, vagy union típus van megadva?
2020. dec. 30. 13:46
1 2 3
 21/25 anonim ***** válasza:
0%

" Viszont mivel a compilered paddingolt, ezért hozzáadott még 2 bájtot,"


Nem "paddingolt" semmiféle compiler, marharépa.

2020. dec. 31. 12:47
Hasznos számodra ez a válasz?
 22/25 anonim ***** válasza:
#21 Oh, most már talán struct padding sem létezik?
2020. dec. 31. 13:13
Hasznos számodra ez a válasz?
 23/25 anonim ***** válasza:

De létezik.

A noname bitfield az, ha nagyobb mint nulla. A struct-on belül.

Amire te utalsz, az nem padding, hanem gépi szóhatárra vagy integerre igazítás.

2020. dec. 31. 13:19
Hasznos számodra ez a válasz?
 24/25 A kérdező kommentje:
De mondom ne paddigoljatok mert gozom sincs miket hadovaltok. Ez vizsga kerdes nem kell ennyire bele menni reszletekbe. Úgy laikus szemmel miert 4 bajt hogy a nagymamam is megertse
2021. jan. 1. 00:36
 25/25 anonim ***** válasza:
47%

20-as már leírta.


struct{

int A:2;

int B:4;

int C:3

}


Az 'A' két, a 'B' négy, a 'C' három bites*. Ez összesen kilenc.

Egy byte az nyolc bit.


* Hiába integer a tipus, ez a három adattag csak nyúlfarknyi. Két, négy és három bit szélesek, legalábbis az általad megadott, kettőspont utáni értékek szerint.


Egy 32 bites számítógép a leggyorsabban 32 bites, azaz négy byte-os integerekkel képes műveleteket végezni. Ennél hosszabb vagy rövidebb adatokkal való operáció plusz gépidőbe telik.

Ezért az okos fordító a te 2,4,3 azaz összesen kilenc bitnyi adatcsoportodat mindjárt egy 32 bitesként kezeli. a 32 bit meg ugye négy byte. Ezért négy byte-os a struktúrád.


Ha unionról van szó, akkor az annyit jelent, hogy az unionba foglalt változók egy közös területen, egy azonos memóriacímen osztoznak. Ehhez persze az kell, hogy a rövidebb, tehát egy char tipusú is elférjen a területen és egy hosszabb, pl. integer is.

Ez meg csak úgy lehet, ha a foglalt terület int méretű.

Ezen a területen elfér a rövidebb is és a hosszabb is.

Mindig az másolódik oda, amelyik éppen kell.

2021. jan. 1. 07:25
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!