Witam,
Mam problem -> rozwiąże go na pewno sam, ale może pomożecie.
Aplikacja pobiera do pamięci zawartość z pliku i ją modyfikuje (nadaje jej pewną maskę).
Po czym zapisuję zmodyfikowaną wersję do pliku. Wręcz banalny programik -> taki formatter logów można powiedzieć.
Jedyny problem to pamięć. W sumie się nie dziwię jeżeli wiecie jak działa <vector> .
Problemu nie mam gdy mam do czynienia z plikiem przykładowo 300 linijkowym (taki testowy).
Problem jest gdy w rzeczywistości operuję na pliku 30 000 linijkowym.
Mam obejście na to -> zapisać każdy element iteracyjny do wspólnych plików a potem z nich odczytywać (można by powiedzieć że zamiast RAM wykorzystuje HDD). A po całym procesie "tymczasowe pliki" usunąć.
ALE... nie chciałbym marnować czasu i czy może ktoś polecić mi najbardziej optymalny kontener względem pamięci ?
#include <array> // <-- odpada bo nie mam w kompilatorze standardu C++11
#include <list>
#include <vector> // <-- odpada
#include <ext/slist>
#include <set>
Znacie jakieś zbiory najbardziej optymalne, dla nieznanej ilości danych, kontenery ?
Sprawdzę jutro <list> , <set> i w ostateczności listę jednokierunkową <ext/slist>, któraś z nich zadziała może to dam wam znać.
Ale z kwestii czysto teoretycznej moglibyście mi doradzić jak to zoptymalizować?
Dla ciekawskich: Jest to wyexportowany do pliku txt zbiór logów który muszę sformatować pod siebie. Jeżeli komputer pracuje ~3 lata to takie eventy są w dużej liczebności ;)
Czemu nie <vector> ? Działa on dynamicznie -> alokuje on pamięć przykładowo "n bajtów", gdy procesowo tę granicę przekraczam
vector rezerwuje kolejne tyle co poprzednio (tutaj 2n). Przy kolejnym przekroczeniu będzie (4n) itd. I wydaje mi się że główny problem tkwi w tym że program podczas rezerwacji "sterty" (pamięci podręcznej) dla siebie, jest na tyle mało pazerny że vector przekracza ją w pewnym momencie i sypie mi się program. Albo kompilator narzuca pewne ograniczenie ? -> NIE WIEM. Ale śledzę działanie programu i pamięć RAM ma ciągle ponad 50% wolnej przestrzeni -> podobnie CPU ;P
Obejście mam ale wolałbym zrobić to na lenia zamiast modyfikować pół kodu. Macie jakieś propozycję odnośnie tych zbiorów?