Próbuję odwzorować plik na pamięć, a następnie analizować linię po linii - czy jest to, co powinienem użyć?istream vs memory mapowanie pliku?
Czy to jest tak samo jak odwzorowywanie pliku w pamięci w systemie Windows? Miałem trudności z odnalezieniem pełnego przykładu mapowania pliku do pamięci.
Widziałem ludzi łączących artykuły mapowania pamięci z msdn, ale jeśli ktoś mógłby polecić mały (~ 15 liniowy) przykład, byłbym bardzo mile widziany.
Muszę wyszukiwać niewłaściwe rzeczy, ale podczas wyszukiwania "przykład mapowania pamięci C++" w google nie mogłem znaleźć przykładu, który obejmował iterowanie.
Były najbliższymi wyniki (tak ludzi zdaje sobie sprawę Szukałem): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2044.html#ClassSharedMemoryObjectExample
http://msdn.microsoft.com/en-us/library/dd997372.aspx (nie C++ code)
http://beej.us/guide/bgipc/output/html/multipage/mmap.html (był dla Unix wierzę, nie windows)
"* Próbuję odwzorować plik w pamięci i ** następnie ** przeanalizować wiersz po linii *". Czy możesz nam powiedzieć, dlaczego chcesz mapować plik na pamięć? Dlaczego parsowanie line-by-line (przy użyciu, powiedzmy, 'ifstream' lub' fopen') nie jest wystarczające? –
@Rob, wyłącznie z powodów związanych z wydajnością. Byłem pod wrażeniem (fałsz?), Że szybciej odwzorowuje cały plik? – user997112
@ user997112: To zależy od tego, co zrobisz z danymi. Jeśli używasz go do poprawnego parsera, który implementuje backtracking, pliki mapowane w pamięci są bezspornie szybsze; ale jeśli po prostu przechodzisz do przodu przez dane (tak jak w przypadku wielu prostych wywołań 'std :: getline'), wątpię, aby wystąpiła jakakolwiek zauważalna różnica. Z pewnością nie ma mowy o używaniu pliku odwzorowanego w pamięci, chyba że brakuje ci wirtualnej przestrzeni adresowej (prawdopodobnie tylko problem w 32-bitowym kodzie z plikami rozmiaru GB +). – ildjarn