02. december 2008 - 21:20Der er
10 kommentarer og 1 løsning
C++ container der allokerer hukommelse i klumper
Hej Eksperter,
Er der nogen, der ved om der findes en C++ container et sted, der allokerer hukommelse i klumper. Det findes ikke i STL og efter hvad jeg kan se heller ikke i boost. Det jeg har brug for er noget i stil med en vector, men jeg skal undgå at kopiere alt indhold, når den udvides. En container som f.eks. STL-list dur heller ikke. Der er for meget overhead i at have alle de pointers liggende, som følger med en liste. Jeg har ikke brug for random access, så det behøver containeren ikke at supportere. Implementering af en sådan container vil indeholde en liste af arrays/vectors forestiller jeg mig. Jeg kan naturligvis blot implementere containeren selv, men tænkte at der måske allerede var nogen, der havde gjort arbejdet.
Ja, noget i den stil. Med en fast størrelse for de indvendige vectors, forestiller jeg mig. Sagen er at jeg tilføjer elementer enkeltvis og ved ikke fra starten hvor mange der er. Til sidst skal jeg blot løbe igennem dem alle en enkelt gang.
@segmose: Jeg mener heller ikke at jeg kan klare det ved at implementere en ny allocator. Den vil stadig af vectoren blive sat til at allokere alt hukommelse på ny, hvis vectoren udvides.
@arne_v: Lige præcis. Klassen VecVec er præcis hvad jeg har brug for, og nu har du jo gjort arbejdet, så jeg kan jo selvfølgelig blot kopiere ovenstående, men jeg tænkte om der ikke fandtes en standard-klasse, der gør det samme. Jeg tror dog at jeg vil bruge en STL-list yderst i data, da man ellers risikerer at alt data skal kopieres, hvis den yderste vector skal udvides. Alternativt kunne man opbevare pointers (til vectors) i den yderste vector. Læg et svar, så uddeler jeg point.
Jeg er stadig interesseret i at høre om der er nogen, der har kendskab til en standard implementering af det arne_v foreslår ovenfor.
Ja heltsikkert, det har du nok ret I, Jeg var nok lidt for optimistisk mht. implementeringen, i standarden skulle der være mulighed for forskellige implementation af vector, det er jo ikke et krav at vectors data elementer ligger i rækkefølge fysisk.
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.