Maxymalny rozmiar tablicy

dział ogólny

Re: Maxymalny rozmiar tablicy

Nowy postprzez Cyfrowy Baron » środa, 31 lipca 2013, 12:03

U mnie (Windows XP 32-bit RAM: 3.49 GB) też nie da się alokować tej tablicy o wymiarze 9 000 000. Ale gdy zmniejszyłem rozmiar tablicy float wartosciDanych[12] do 12 to tablica się alokowała i cały program zajmuje ~502 MB. Bez alokowania tablicy program zajmuje 8,5 MB. Sama tablica o wymiarze TTik 9 000 000 dla wartość danych 12, zajmuje w pamięci 493 312 KB. Trzymam się więc tego, że problemem jest tablica w tablicy.

Patrząc na zapotrzebowanie na pamięć tablicy ~500 MB, jak to się ma do pliku o rozmiarze 150 MB?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 12:17

Dane przychodzą w formacje csv:


DataGodzina; dane1;


Wczytuje je do tablicy TTik

Gdzie wartoscDanych[0] = dane1;

wartoscDanych[1] - operacja A wykonane na dane1
wartoscDanych[2] - operacja B wykonane na dane1

itp

Chyba, że dane wczytać po prostu do struktury:

struct TTik {
TDateTime dataGodzina;
float dane;
};

A potem jak chce obrabiać te dane po przez różne operacje ( średnie, min, max itp ) zrobić oddzielną tablicę ??
Ostatnio edytowano środa, 31 lipca 2013, 12:19 przez Corvis, łącznie edytowano 1 raz
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez Cyfrowy Baron » środa, 31 lipca 2013, 12:18

Zastanawiam się nad taką konstrukcją:

KOD cpp:     UKRYJ  
class TTik {
        private:

        public:
                TDateTime dataGodzina;
                                float *wartosciDanych;
                                __fastcall TTik();
                                __fastcall ~TTik();
};

__fastcall TTik::TTik() // definicja konstruktora klasy
{
 wartosciDanych = new float[20];
}


Tak da się alokować a rozmiar wyniesie 902 MB.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Corvis
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » środa, 31 lipca 2013, 13:05

U mnie (Windows XP 32-bit RAM: 3.49 GB) też nie da się alokować tej tablicy o wymiarze 9 000 000.

Ciekawe. U mnie, WinXP 32-bit i 2GB RAM, daje się stworzyć taką tablicę. Za TDateTime przyjąłem 4 bajty, dlatego też spróbowałem stworzyć tablicę 20 000 000 (1,68GB). System przydzielił bez problemu ;)

Zastanawiam się nad taką konstrukcją:

Paradoksalnie te rozwiązanie może zużyć więcej pamięci niż opcja z tablicą. Choć oczywiście ono nie wymaga dużego, jednolitego bloku pamięci.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2271
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 211
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Cyfrowy Baron » środa, 31 lipca 2013, 13:15

polymorphism napisał(a):Paradoksalnie te rozwiązanie może zużyć więcej pamięci niż opcja z tablicą.


Zużycie pamięci jest większe o ~13%.



Dziwna sprawa bo po skompilowaniu aplikacji razem z bibliotekami, program alokuje pamięć która osiąga rozmiar ~780 MB. Ale dla tablicy 20 000 000 jak podałeś już nie przejdzie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 13:22

A co myślicie o rozdzieleniu danych tak jak napisałem ?
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez Cyfrowy Baron » środa, 31 lipca 2013, 13:27

To już ty wiesz lepiej. Patrząc na twoją klasę nie da się powiedzieć co będzie lepsze. Możesz alokować pamięć tak jak podałem, ale musisz liczyć się z większym zużyciem pamięci. U mnie dla tablicy TTik[20 000 000] zużycie pamięci wyniosło 1,416 GB.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 13:33

Ciekawe jak to będzie wyglądało jak aplikacja się rozrośnie.

No nic będę sprawdzał i pisał jak coś :)

Dzięki
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » środa, 31 lipca 2013, 13:41

Generalnie tak duże zużycie pamięci dla danych ze 150MB pliku jest grubą przesadą. Podejrzewam, że jakbyś władował ten cały plik do wektora floatów, to by nieco mniej pamięci zajął niż sam plik (przy założeniu, że są tam też liczby powyżej czterech znaków).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2271
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 211
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Cyfrowy Baron » środa, 31 lipca 2013, 16:18

To plik CSV więc dane są zapisane liniami więc może najprościej i najoszczędniej byłoby wczytywać i przetwarzać dane co 1 linię.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » środa, 31 lipca 2013, 17:57

Pod warunkiem, że dane przetwarza sekwencyjnie, w przeciwnym wypadku musi co najmniej zrobić indeksy, żeby szybko skakać do wybranych linii.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2271
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 211
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 21:37

Sposobem Barona zaalokowałem tablicę 9 000 000 zajmuje w pamięci 814 MB

co do liczenia danych to różnie raz liczę sekwencyjnie a czasem po przeliczeniu jakiejś funkcji muszę wrócić na początek i liczyć znowu.

Spróbuję to zrobić na takiej tablicy i dam znać jak to będzie działać.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » czwartek, 1 sierpnia 2013, 09:54

A ten 150MB plik ile ma pozycji?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2271
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 211
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » czwartek, 1 sierpnia 2013, 09:56

trochę ponad 5 000 000
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » czwartek, 1 sierpnia 2013, 11:05

Z tego co mi wychodzi taki plik wczytany do pamięci zająłby około 60MB. To w sumie niewiele. Rozumiem, że do każdej wartości przypisane są inne wartości, które są wynikiem jakiejś operacji. Pytanie, czy one muszą być w jednej tablicy? No i czy te tablice muszą być w całości wczytane do pamięci, jeśli są/mogą być takie duże?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2271
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 211
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia stronaNastępna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron