Hi
Dus, je kan uit een array elementen opvragen via de index, je microprocessor weet wat het moet opvragen omdat het adres van het eerste element opgeslagen is.
Dus e.g:
De lengte van een integer (er vanuit gaand dat de microprocessor de 64-bit architectuur hanteert) is 8 bytes.
Dus simplistisch gezegd (en als ik correct ben), zou het tweede element adres 0x0008 zijn, en het derde 0x0010,...
Toch heb ik hier enkele vragen bij,
als enkel het eerste adres opgeslagen wordt en de rest op dat adres gecalculeerd wordt, waar wordt dat adres opgeslagen dan? In hetzelfde memory block als het eerste element in de array? Elk element wordt toch in een aparte memory block opgeslagen, toch?
En wat, als de array geinitaliseerd is, daarna nog enkele variabelen zijn gedefinieerd, en de programmeur daarna een element aan de array toevoegt (via vector bijvoorbeeld), die adressen zullen mekaar toch nooit niet mooi opvolgen?
e.g:
Dus, hoe werken arrays of collecties nu precies in relatie met de microprocessor en het geheugen? Ik heb
al opzoekwerk gedaan en gelezen (en geleerd natuurlijk), alleen de bovenste twee vragen vindt ik maar niet.
Bedankt!
Dus, je kan uit een array elementen opvragen via de index, je microprocessor weet wat het moet opvragen omdat het adres van het eerste element opgeslagen is.
Dus e.g:
code:
1
2
3
4
5
6
7
| int foo[5] = { 5, => 0x0000 8, 455, 7, 786468 }; |
De lengte van een integer (er vanuit gaand dat de microprocessor de 64-bit architectuur hanteert) is 8 bytes.
Dus simplistisch gezegd (en als ik correct ben), zou het tweede element adres 0x0008 zijn, en het derde 0x0010,...
Toch heb ik hier enkele vragen bij,
als enkel het eerste adres opgeslagen wordt en de rest op dat adres gecalculeerd wordt, waar wordt dat adres opgeslagen dan? In hetzelfde memory block als het eerste element in de array? Elk element wordt toch in een aparte memory block opgeslagen, toch?
En wat, als de array geinitaliseerd is, daarna nog enkele variabelen zijn gedefinieerd, en de programmeur daarna een element aan de array toevoegt (via vector bijvoorbeeld), die adressen zullen mekaar toch nooit niet mooi opvolgen?
e.g:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| int foo[8] = { 5, => 0x0000 8, 455, 7, 786468 }; int bar = 4568; // => 0x0020 foo.push_back(745); // => 0x001c (Pseudo-code) /* Current values: int foo[6] = { 5, => 0x0000 8, 455, 7, 786468, 745 }; */ cout << foo[5]; /* zou 0x0020 opvragen, wat 4568 zou zijn. Want het eerste element heeft 0x0000: <=> (gevraagdeIndex) * aantalBytes = 40 == 0x001c */ |
Dus, hoe werken arrays of collecties nu precies in relatie met de microprocessor en het geheugen? Ik heb
al opzoekwerk gedaan en gelezen (en geleerd natuurlijk), alleen de bovenste twee vragen vindt ik maar niet.
Bedankt!