Avatar billede tued Nybegynder
13. juli 2004 - 10:36 Der er 11 kommentarer og
2 løsninger

data struktur

Hej

Jeg skal gemme en masse (kan være over 100) varabler i en data struktur. Ved bare ikke hvilken. Størrelsen på de enkelte variabler kan variere fra 1-8 bytes.
Vil helst ikke bruge en union, da den hurtigt kan bruge alt min RAM. Det skal nemlig bruges i en 8051 (embedded).

Er der nogen der har nogle forslag.

Har prøvet at lave et array af pointere til forskellige strukture men kunne heller ikke rigtig få det til at virke.

Tue
Avatar billede arne_v Ekspert
13. juli 2004 - 10:41 #1
Hvis memory ikke var et problem så var en STL vector vel en glimrende
løsning.

En anden mulighed er et array af void pointers.

Men hvis data kun kan være 1-8 bytes, så vil jeg sige at et array
af union også var en mulighed (fordi en pointer af 4 bytes er et
pænt overhead i forhold til datas størrelse).
Avatar billede tued Nybegynder
13. juli 2004 - 10:50 #2
Hvis jeg bruger en union vil hver union så ikke fylde så meget som den største variable defineret i den ???
Eller vil den kun fylde det den initialiserede fylder ???
Avatar billede arne_v Ekspert
13. juli 2004 - 11:06 #3
En union fylder så meget som den største variant.

Men hvis det er 8 bytes, så er det vel heller ikke slemt.

Og en pointer af 4 byte + gennemsnit af 1-8 byte er faktisk 8.5 bytes.

Derudover er der overhead ved dynamisk memory allokering.
Avatar billede tued Nybegynder
13. juli 2004 - 12:59 #4
Har fået det til at virke med unions, men er der ikke en anden løsning? Jeg har nemlig rigtig mange små (1-2 bytes) variabler og næsten ingen 8 bytes!

Har rundt regnet ikkke meget mere end 500 bytes RAM. Kan ikke gemme dem i ROM/FLASH
Avatar billede arne_v Ekspert
13. juli 2004 - 13:07 #5
Det var ikke meget !

Er rækkefølgen af data signifikant ?

Hvis ikke kan du vel lave f.eks. et array af 80 * 2 bytes og et andet array
af 20 * 8 bytes.
Avatar billede tued Nybegynder
13. juli 2004 - 13:21 #6
Nej det er ikke så meget.

Rækkefølgen er af betydning idet den skal være sorteret.

Hvis jeg skulle bruge to eller flere arrays ville det kræve et array til at holde styr på hvor de enkelte variabler er placeret.

Det bedste ville jo være at kunne smide det hele ned i en database, men det kan jo ikke rigtig lade sig gøre med mine hukommelseskrav.
Avatar billede arne_v Ekspert
13. juli 2004 - 13:45 #7
Hvis der er et tegn som ikke kan optræde i værdierne kunne du pakke det
i et stort array.

Lad os f.eks. sige at det er text og at nul bytes ikke optræder.

a\0bb\0ccc\0

er kun 9 bytes for 3 elementer.

Men indsæt og fjern er noget afskyeligt memmove'ri.
Avatar billede arne_v Ekspert
13. juli 2004 - 13:51 #8
Det gør faktisk ikke noget at all etegn kan forekomme. Du kan pakke dem med
længde prefix.

\1a\2bb\3ccc

stadig 9 tegn. Alle tegn tilladt. Men stadig masser af memmove'ri.
Avatar billede tued Nybegynder
13. juli 2004 - 13:54 #9
ja, kan godt se at det kan lade sig gøre på den måde, men det vil vel blive temmelig langsomt.....
Man behøver jo ikke at gøre det mere besværligt for sig selv end højst nødvendigt.
Avatar billede segmose Nybegynder
13. juli 2004 - 15:16 #10
Hvis du ikke har så meget imod heftig bifmanipulation kan du kode længden med 3 bit

0-7(+1)
Om du så vil ofre en extra bit for at komme op på halv byte istedet for at lave en mere indviklet 3 bit decoder er så din sag.
Længde encodingen er nok best som extern iforhold til dine data da du ellers kommer du i den store udgave af bitcirkuset.

Data længde encoding vil så kun være på 3/8 af ovenstående.
Hvis dine data længeder kun er 1,2,4,8 kan du klare encoding med 2 bit.
Avatar billede arne_v Ekspert
13. juli 2004 - 18:50 #11
Der er ofte et tradeoff mellem memory forbrug og CPU forbrug: du kan spare
memory ved at brugere mere CPU eller du kan spare CPU ved at bruge mere memory.
Avatar billede arne_v Ekspert
13. juli 2004 - 18:50 #12
og et svar fra mig også
Avatar billede tued Nybegynder
14. juli 2004 - 07:37 #13
Tak for jeres kommentare og svar.

Jeg har valgt at bruge strukture og unions da det simplificere min kode meget. Faktisk rigtig meget.

Havde håbet lidt på at i havde en rigtig smart løsning. Hvis jeg kommer i RAM problemmer må jeg jo i gang med lidt memmove og den slags.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester