Я тестировал две конфигурации записи:
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<char*>(&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 (если у кого-то есть представление об этом, мне интересно):