буферизация std :: fstream против ручной буферизации (почему 10-кратное усиление при ручной буферизации)?
Я проверил две конфигурации записи:
1) Fstream буферизация:
// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream;
stream.rdbuf()->pubsetbuf(buffer, length);
stream.open("test.dat", std::ios::binary | std::ios::trunc)
// To write I use :
stream.write(reinterpret_cast(&x), sizeof(x));
2) Ручная буферизация:
// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream("test.dat", std::ios::binary | std::ios::trunc);
// Then I put manually the data in the buffer
// To write I use :
stream.write(buffer, length);
Я ожидал того же результата ...
Но моя ручная буферизация повышает производительность в 10 раз при записи файла размером 100 МБ, а буферизация в fstream ничего не меняет по сравнению с обычной ситуацией (без переопределения буфера).
У кого-нибудь есть объяснение этой ситуации?
РЕДАКТИРОВАТЬ: Вот новости: тест только что на суперкомпьютере (64-разрядная архитектура Linux, 8-ядерный процессор Intel Xeon, файловая система Luster и ... надеюсь, хорошо настроенные компиляторы) (и я необъяснить причинурезонанс" для 1кБ ручного буфера ...)
РЕДАКТИРОВАТЬ 2: И резонанс в 1024 B (если у кого-то есть представление об этом, яя заинтересован):