Jak zoptymalizować czytanie i pisanie, grając z rozmiarem bufora?

Jak zoptymalizować szybkość odczytu i zapisu w std :: ifstream i std :: ofstream w standardowym C ++ / C ++ 11 (bez funkcji POSIX)? (1 <- ponieważ istnieje kilka pytań, numery te określają różne punkty)

Nie znam dokładnie roli buforów, więc możesz potwierdzić, że:

do odczytu: duża część pliku jest wstępnie załadowana do pamięci (więc rozmiar bufora określa rozmiar tej dużej części) (2)do zapisu: dane są zapisywane w pamięci i po zapełnieniu bufora są przesyłane z pamięci do systemu plików (3)

Jak ustawić rozmiar bufora na std :: ifstream i std :: ofstream? (4)

Biorąc pod uwagę, że pracuję z bardzo dużymi plikami binarnymi (kilka 10 GB) i że systemy plików są często optymalne dla dużego odczytu / zapisu, czy mogę zdefiniować rozmiar bufora równy 100 MB? Jeśli to zmniejszy wydajność, dlaczego? (5)

Wreszcie, czy domyślny bufor jest „inteligentny” w tym sensie, że ifstream / ofstream wykryje, ile danych jest odczytywanych / zapisywanych do pliku i dostosowuje rozmiar bufora, aby zapewnić maksymalną prędkość? (6)

questionAnswers(1)

yourAnswerToTheQuestion