CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [BCB C++] Out of memory

[BCB C++] Out of memory

dział ogólny

[BCB C++] Out of memory

Nowy postprzez Darek_C++ » niedziela, 3 lutego 2013, 18:02

Wczytując do THashedStringList "większy" plik często zgłaszany jest wyjątek

Exception class EOutOfMemory with message 'Out of memory'. Process ZliczanieLinii.exe (1588)

Choć pamięci RAM mam 2 x więcej niż teoretycznie wielkość wczytywanego pliku.
Pytanie brzmi czy jest to związane z moim przestarzałym kompilatorem Turbo Explorer C++ i czy idzie jakoś ten limit zmienić ?
Bo przykładowo ten sam plik wczytywany w programiku napisanym w C# "daje radę" :)
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Cyfrowy Baron » niedziela, 3 lutego 2013, 18:26

To jest raczej związane z pojemnością tej listy - jak sądzę ma swoje ograniczenia.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Darek_C++ » niedziela, 3 lutego 2013, 19:46

Jak zwykle Masz rację :)
Zrobiłem symulację wczytywania:
KOD cpp:     UKRYJ  
vector<String> myVector;
String plik = OpenTextFileDialog1->FileName;
THashedStringList *hList = new THashedStringList;
hList->LoadFromFile(plik);
int n = 0;
for(int jj = 0; jj < 10; jj++)
{
        for(int iix = 0; iix < hList->Count; iix++)
        {
                myVector.push_back(hList->Strings[iix]) ;
        }
        Memo2->Lines->Add((String) myVector.size());
        Application->ProcessMessages();
}
 


2233286
4466572
6699858
8933144
11166430
13399716
15633002
17866288
20099574
22332860
Koniec
0 Czas: 18.969000

I dało radę. Przy 10 x wczytywaniu do THashedStringList zgłaszamy był wyjątek
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Cyfrowy Baron » niedziela, 3 lutego 2013, 22:04

Nie bardzo rozumiem na czym polega ta symulacja. Wczytałeś do listy cały plik? Jeżeli wczytał się cały to ograniczenie nie wynika z listy.

Ile wierszy ma plik, który wczytujesz do listy?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Darek_C++ » niedziela, 3 lutego 2013, 22:38

Na tym , że przedtem zamiast vector'a byala druga lista THashedStringList która była w pętli zwiększana o kolejną porcję danych wczytanych uprzednio z pliku i w pewnym momencie był zawsze out of memory.
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez polymorphism » niedziela, 3 lutego 2013, 22:41

Ponowię pytanie: ile jest tych danych, że brakuje Ci 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: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Darek_C++ » niedziela, 3 lutego 2013, 23:06

Chwila już szykuję odpowiedz....
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Darek_C++ » niedziela, 3 lutego 2013, 23:21

Scalony plik testowy miał: 11166430 linii i był wielkości 715 MB. Ale teraz jest inaczej, bo jakiś czas temu z powodu Out Of Memory nie mogłem go wczytać do THashedStringList, a teraz mogę :)
Przy okazji - jak taki duży plik wczytać do vector'a vector<String> myVector; ?
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Cyfrowy Baron » poniedziałek, 4 lutego 2013, 01:09

Darek_C++ napisał(a):jak taki duży plik wczytać do vector'a vector<String> myVector; ?


A jaki masz problem z vector? Bo bezpośrednio to nie da się wczytać, musisz użyć np. klasy iftream wczytując plik liniami, np:

KOD cpp:     UKRYJ  
char Buf[255];
 ifstream infile;
 infile.open("nazwa pliku");
 infile.getline(Buf, 255); // to wstawiasz do wektora
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez polymorphism » poniedziałek, 4 lutego 2013, 10:50

Przy okazji - jak taki duży plik wczytać do vector'a vector<String> myVector; ?

Pytanie: po co wczytujesz tak duży plik w całości do 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: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Darek_C++ » wtorek, 5 lutego 2013, 14:19

W celu:
- usunięcia duplikatów
- przycięcia adresów do domeny np: http://www.programowanie.cal.pl/forum/viewtopic.php?f=2&t=1853 > trim > http://www.programowanie.cal.pl

itd...
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez polymorphism » wtorek, 5 lutego 2013, 14:24

Do tego nie trzeba czytać pliku w całości do pamięci. Temat duplikatów był na tym forum... chyba nawet to Twój temat był.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Darek_C++ » środa, 6 lutego 2013, 10:09

Tak to był mój temat z tym, że w tym pytałem pytałem o ten "of out memory", a "duplikaty wyszyły przy okazji".
Ale i tak przy wczytywaniu danych porcjami i ich obrabiani "of out memory" może wystąpić, bo gdzieś dane muszę przechowywać... więc pozwolę sobie za jakiś czas powrócić do tamtego :)
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez Cyfrowy Baron » środa, 6 lutego 2013, 10:19

Darek_C++ napisał(a):Ale i tak przy wczytywaniu danych porcjami i ich obrabiani "of out memory" może wystąpić


Błąd nie wystąpi jeżeli nie będziesz czytał całego pliku, a tylko jego części mieszczące się na liście do której go przepiszesz.

W ogóle to filtrowanie powtarzających się wpisów wydaje się zbędne. Czy program podczas zapisywania danych do pliku nie mógłby ich od razu filtrować, czyli zastępować stary wpis nowym?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Out of memory

Nowy postprzez polymorphism » środa, 6 lutego 2013, 11:24

Ale i tak przy wczytywaniu danych porcjami i ich obrabiani "of out memory" może wystąpić, bo gdzieś dane muszę przechowywać...

W drugim pliku możesz przechowywać, i problemu z brakującą pamięcią nie będzie. Przy tak dużych plikach zastanowiłbym się nad zastosowaniem indeksów, wtedy dodanie wpisu w odpowiednim miejscu w pliku nie będzie się wiązało z przewalaniem jego całej zawartości.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox


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 3 gości