Plik binarny jako tablica

0

Posiadam Qt z MinGW 32-bit na Windows XP 32bit, na laptopie to samo na Windows 7 64 bit.

Czy w C++ istnieje coś takiego, jakaś struktura, biblioteka, która umożliwia losowy dostęp do pliku tak, że jest on widziany jako tablica? Chodzi mi o to, że robię wektor intów, w których każdy element ma 4 bajty, a tych elementów ma być ok. 1giga. Dla małych tablic, kilkaset milionów elementów to da radę, dla większych, to fakt, że program jest 32-bitowy nie pozwoli utworzyć gigantycznej tablicy. Na potrzeby pewnych prób chciałbym przerobić program tak, że tablica pozostanie tablicą, ale w tle dane będą w pliku, a nie w pamięci operacyjnej, ewentualnie będzie jakiś mały bufor dla poprawy wydajności. W momencie zniszczenia obiektu bufor byłby zapisywany do pliku i w tym pliku byłaby zawartość tego wektora. Szczegóły techniczne dotyczące wymiany danych między RAM a plikiem nie są istotne. Chodzi tylko o to, że jak napiszę "X = Tablica[3]", to uzyskam 3 element z pliku, a jak napiszę "Tablica[5] = X", to zostanie zapisany 5 element pliku. Dla int to będą odpowiednio bajty 12-15 i 20-23, a dla char będą to odpowiednio bajty 3 i 5, bo char zajmuje jeden bajt.

Słyszałem, że WinApi coś takigo udostępnia. Jak się nazywa ta klasa i jak jej użyć? Czy Qt coś takiego udostępnia?
Czy w Qt/MinGW32 da się zmusić kompilator do skompilowania do 64-bit, wtedy jak na laptopie zrobię plik wymiany 20GB, to wciągnięcie całego pliku o wielkości 5GB do zwykłej tablicy lub wektora nie będzie problemem.

Sam próbowałem coś takiego utworzyć, coś nawet z tego wyszło, jeszcze nie do końca dobrze to działa, musiałbym poprawić, ale z drugiej strony nie ma sensu wynajdywać koła od nowa.

Jeżeli w C++ się nie da, to czy da się to samo w C#/.NET 4.0 lub ewentualnie w Javie 7?

0

Brzmi jak mmap lub jego odpowiednik dla Windows: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366556%28v=vs.85%29.aspx

Qt wydaje się mieć QFileDevice::map ( http://qt-project.org/doc/qt-5/qfiledevice.html#map ) ale nigdy tego nie używałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1