Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rakennerakenteiden Tasaus ja Täyte | Rakennerakenteiden ja Muistin Ymmärtäminen
Practice
Projects
Quizzes & Challenges
Visat
Challenges
/
C-Rakenteiden Hallinta

bookRakennerakenteiden Tasaus ja Täyte

Pyyhkäise näyttääksesi valikon

Kohdistus

Jokainen rakenteen kenttä kohdistetaan rajalle, joka on rakenteen suurimman alkion koon monikerta.

Esimerkiksi, jos suurin alkio on 4 tavua, jokainen alkio kohdistetaan 4 tavun rajalle.

Tämä tehdään muistinkäytön nopeuttamiseksi ja laitteistotason kohdistusongelmien välttämiseksi.

main.c

main.c

copy
1234567891011121314151617181920
#include <stdio.h> // simple struct struct Example { char a; int b; double c; }; int main() { struct Example test; printf("Size of struct Example: %zu\n", sizeof(test)); printf("Address of test.x (char): %p\n", &test.a); printf("Address of test.y (int): %p\n", &test.b); printf("Address of test.c (double): %p\n", &test.c); return 0; }

Saatat ihmetellä, miksi struct Example-rakenteen koko on 16 tavua, vaikka jokainen kenttä kohdistetaan suurimman tyypin, eli 8 tavun, rajalle. Ensisilmäyksellä voisi ajatella, että kaikkien kolmen kentän kohdistaminen 8 tavun rajalle johtaisi kokonaiskokoon 24 tavua. Todellisuudessa asia toimii hieman eri tavalla.

Ensimmäinen kenttä a on char ja vie 1 tavun. Jotta seuraava kenttä b, joka on tyyppiä int, alkaisi 4 tavun rajakohdasta, kääntäjä lisää 3 tavun täytteen a:n jälkeen. Kenttä b vie itsessään 4 tavua ja on nyt oikein kohdattu.

Seuraava kenttä c on double ja sen tulee alkaa 8 tavun rajakohdasta. Kääntäjä lisää täytettä b:n jälkeen, jotta c sijoittuu oikeaan osoitteeseen. Kenttä c vie 8 tavua.

Yhteensä: 1 tavu a:lle + 3 tavua täytettä + 4 tavua b:lle + 8 tavua c:lle = 16 tavua. Kohdistussäännöt täyttyvät ja muisti käytetään tehokkaasti.

question mark

Miksi struct:in koko on usein suurempi kuin sen yksittäisten kenttien kokojen summa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 3. Luku 2
some-alt