Et je retombe sur des temps très similaire au fread ou read. Plutôt un tout petit peut plus lent sur les petits fichiers, et un peu plus rapide sur les gros fichiers.
./test 1M 2M 4M 8M 16M 32M
File 1M
C++ istreambuf_iterator : .......... 3445 us
C++ stream::rdbuf : .......... 432 us (7.97)
C++ ifstream_read : .......... 137 us (25.15)
libc fread : .......... 137 us (25.15)
POSIX read : .......... 134 us (25.71)
File 2M
C++ istreambuf_iterator : .......... 7076 us
C++ stream::rdbuf : .......... 1319 us (5.36)
C++ ifstream_read : .......... 265 us (26.70)
libc fread : .......... 270 us (26.21)
POSIX read : .......... 262 us (27.01)
File 4M
C++ istreambuf_iterator : .......... 13638 us
C++ stream::rdbuf : .......... 2429 us (5.61)
C++ ifstream_read : .......... 596 us (22.88)
libc fread : .......... 601 us (22.69)
POSIX read : .......... 583 us (23.39)
File 8M
C++ istreambuf_iterator : .......... 27491 us
C++ stream::rdbuf : .......... 5478 us (5.02)
C++ ifstream_read : .......... 1984 us (13.86)
libc fread : .......... 1983 us (13.86)
POSIX read : .......... 1986 us (13.84)
File 16M
C++ istreambuf_iterator : .......... 54919 us
C++ stream::rdbuf : .......... 10920 us (5.03)
C++ ifstream_read : .......... 4773 us (11.51)
libc fread : .......... 4789 us (11.47)
POSIX read : .......... 4805 us (11.43)
File 32M
C++ istreambuf_iterator : .......... 109104 us
C++ stream::rdbuf : .......... 36073 us (3.02)
C++ ifstream_read : .......... 9698 us (11.25)
libc fread : .......... 9748 us (11.19)
POSIX read : .......... 9660 us (11.29)
[^] # Re: Le résultat ne m'a pas étonné du tout
Posté par xoddark . En réponse au lien ifstream vs posix (le résultat va vous étonner). Évalué à 2.
Effectivement,
j'ai fait un test rapide en utilisant un std::ifstream::read() tell que présenté dans la page cppréférence : https://en.cppreference.com/w/cpp/io/basic_istream/read
Et je retombe sur des temps très similaire au fread ou read. Plutôt un tout petit peut plus lent sur les petits fichiers, et un peu plus rapide sur les gros fichiers.