Hur sparar man i ett objekt i ramminnet i C++?

Permalänk

Hur sparar man i ett objekt i ramminnet i C++?

Jag har ett objekt som heter

QList<T> listansNamn;

Där "T" är klassens data typ. Detta är alltså en mall (template) som går under generics i C++.
Ett problem är att QList<T> listansNamn kan max vara 2^28-1 bytes som jag har läst på internet. Detta är mycket, men ändå lite om man ska fylla på listan listansNamn med massiva objekt och dessutom många objekt.

Så därför tänkte jag spara QList<T> i raminnet? Troligtvis så måste jag använda något annat än just QList<T>.
Har någon något förslag?

Permalänk
Medlem

Vad menar du med att spara ett objekt i ramminnet?

Normalt ligger alla objekt alltid lagrade någonstans i ramminnet medan ett program körs - enda undantaget är om den biten av ramminnet blivit swappad till disk, men det är något som operativsystemet hanterar automatiskt utan att man behöver tänka på det.

Permalänk
Medlem

2^28 objekt i listan, inte 2^28 bytes totalt minnesutnyttjande, objekten i listan kan alltså ta mycket mer plats.

En länkad lista med så många objekt är i allmänhet rätt meningslös eftersom det tar lång tid att göra en linjärsökning i den. Som vanligt behöver man göra en analys av vad man ska använda datastrukturen till för att göra rätt val av datastruktur.

std::vector::max_size
mmap(2)

Permalänk
Hedersmedlem
Skrivet av heretic16:

Jag har ett objekt som heter

QList<T> listansNamn;

Där "T" är klassens data typ. Detta är alltså en mall (template) som går under generics i C++.
Ett problem är att QList<T> listansNamn kan max vara 2^28-1 bytes som jag har läst på internet. Detta är mycket, men ändå lite om man ska fylla på listan listansNamn med massiva objekt och dessutom många objekt.

Så därför tänkte jag spara QList<T> i raminnet? Troligtvis så måste jag använda något annat än just QList<T>.
Har någon något förslag?

Skrivet av KAD:

2^28 objekt i listan, inte 2^28 bytes totalt minnesutnyttjande, objekten i listan kan alltså ta mycket mer plats.

En länkad lista med så många objekt är i allmänhet rätt meningslös eftersom det tar lång tid att göra en linjärsökning i den. Som vanligt behöver man göra en analys av vad man ska använda datastrukturen till för att göra rätt val av datastruktur.

std::vector::max_size
mmap(2)

Kan bara hålla med KAD. Om objekten dessutom är "massiva" så ska du nog fundera igenom den här lösningen några gånger så att ditt program inte blir onödigt långsamt och/eller tar onödigt mycket minne.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Skrivet av KAD:

2^28 objekt i listan, inte 2^28 bytes totalt minnesutnyttjande, objekten i listan kan alltså ta mycket mer plats.

En länkad lista med så många objekt är i allmänhet rätt meningslös eftersom det tar lång tid att göra en linjärsökning i den. Som vanligt behöver man göra en analys av vad man ska använda datastrukturen till för att göra rätt val av datastruktur.

std::vector::max_size
mmap(2)

Okej, Ja men då kan jag använda QList

Nu är QList ingen länkad lista som tur.

Permalänk
Skrivet av giplet:

Kan bara hålla med KAD. Om objekten dessutom är "massiva" så ska du nog fundera igenom den här lösningen några gånger så att ditt program inte blir onödigt långsamt och/eller tar onödigt mycket minne.

Massiva enligt mig är om man har ca 50 variabler som fält i en klass. Där varje fält är antingen en int eller float. Lätt även till getters och setters.

Permalänk
Medlem
Skrivet av heretic16:

Massiva enligt mig är om man har ca 50 variabler som fält i en klass. Där varje fält är antingen en int eller float. Lätt även till getters och setters.

Det kallar jag bara extremt dålig kodning

Visa signatur

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Permalänk
Medlem
Skrivet av talonmas:

Det kallar jag bara extremt dålig kodning

Är det dåligt att ha en klass med många fält, och hur ska man göra istället?

Visa signatur

MSI PRO Z790-P WIFI | Intel i9 13900K | 128 GB DDR5
GTX 4070 12 GB
Samsung 990 Pro 4 TB | WD Black SN850X 2 TB Gen 4 | 2 x 1 TB Samsung 970 EVO Plus
3 x ASUS 27" | 1 x Philips 49"

Permalänk
Medlem
Skrivet av Superfrog:

Är det dåligt att ha en klass med många fält, och hur ska man göra istället?

Dela upp det i fler klasser. Avgränsa vad varje klass gör och representerar.

Visa signatur

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3