Avatar billede krismort Nybegynder
03. februar 2002 - 18:34 Der er 2 kommentarer og
1 løsning

array indexer?

Hej
Jeg har en variabel som er af en brugerdefineret klasse type: CVertex *VertexLst;
Hvis jeg så initializer dens array index'er med
VertexLst = new CVertex[max_verticex]; hvor stort må tallet max_vertices så være ? er der noget med at et arrat højst kan have 65536 index'er eller tager jeg grueligt fejl ?

Kristian
Avatar billede krismort Nybegynder
03. februar 2002 - 18:34 #1
ups jeg mente ikke klasse type... jeg mente bruger defineret struktur
Avatar billede mbulow Nybegynder
03. februar 2002 - 19:20 #2
Begrænsningen skulle meget gerne ligge i hvor meget hukommelse der kan adresseres med en 32-bit pointer. Dvs. 2^32 byte == meget højt tal. Selvfølgelig vil du, hvis du ikke lige tilfældig vis ligger inde med et system med 4TByte RAM, løbe tør for hukommelse først.

Jeg lavede selv et par tests der kan være med til at vise det.
Jeg lavede to klasser CVertexA, og CVertexB, defineres som:

class CVertexA{
    float x, y, z;
};

class CVertexB{
    char x;
};

Og så gik jeg ellers igang med at allokere arrays.
Allokeringen gik for de to klasser igang når jeg brugte følgende linjer:

CVertexA *pVertices = new CVertexA[60000000];
CVertexB *pVertices = new CVertexB[800000000];

Men da jeg godt er klar over at jeg løber tør for RAM før allokeringen bliver færdig, stoppede jeg efter et kort stykke tid, hver gang.
(Den allokerer faktisk, for Windows brokkede sig hurtig over for lidt virtuel hukommelse)

Men i betragtning af at allokeringen gik igang, med mange flere CVertexB objekter, ser det meget ud til at være et spørgsmål om mulig adressering... Altså hvor meget strukturerne/objekterne fylder og hvor mange der allokeres
Avatar billede soepro Nybegynder
04. februar 2002 - 08:47 #3
Din grænse på 65535 elementer stammer sikkert fra størrelsen på en int på et 16-bit system. På et Windows system, er størrelsen på en int blevet 32-bit (4 bytes) og kan dermed indeholde tallet 4.294.967.296 eller 2.147.483.648 hvis du tillader fortegn. Ligeledes er pointere 32-bit, dvs. du kan addressere 4 GB.

Størrelsen af dit index afhænger derfor, som mbulow lidt er inde på af to faktorer: nemlig den maksimale størrelse hukommelse der kan addresseres og størrelsen af det enkelte element.

I praksis er det selvfølgelig størrelsen på din RAM der dikterer størrelsen - hvis du bruger al din RAM til dit array, skal Windows jo til at ligger at swappe RAM frem og tilbage til disken - og så ryger din performance. Jeg mener at MSDN foreskriver at man et givent program maksimalt må bruger 50% af den tilgængelige RAM, så det er nok en god målestok.
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