Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <chrono>
- #include <fstream>
- #include <iostream>
- #include <functional>
- void measure(const std::string& test, std::function<void()> function)
- {
- auto start_time = std::chrono::high_resolution_clock::now();
- function();
- auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - start_time);
- std::cout<<test<<" "<<static_cast<double>(duration.count()) * 0.000001<<" ms"<<std::endl;
- }
- #define BUFFER_SIZE (1024 * 1024 * 1024)
- int main(int argc, const char * argv[])
- {
- auto buffer = new char[BUFFER_SIZE];
- memset(buffer, 123, BUFFER_SIZE);
- measure("FILE* write", [buffer]()
- {
- FILE* file = fopen("test_file_write", "wb");
- fwrite(buffer, 1, BUFFER_SIZE, file);
- fclose(file);
- });
- measure("FILE* read", [buffer]()
- {
- FILE* file = fopen("test_file_read", "rb");
- fread(buffer, 1, BUFFER_SIZE, file);
- fclose(file);
- });
- measure("fstream write", [buffer]()
- {
- std::ofstream stream("test_stream_write", std::ios::binary);
- stream.write(buffer, BUFFER_SIZE);
- });
- measure("fstream read", [buffer]()
- {
- std::ifstream stream("test_stream_read", std::ios::binary);
- stream.read(buffer, BUFFER_SIZE);
- });
- delete[] buffer;
- }
- FILE* write 1388.59 ms
- FILE* read 1292.51 ms
- fstream write 3105.38 ms
- fstream read 3319.82 ms
- $ clang++ main.cpp -std=c++11 -stdlib=libc++ -O3
- $ ./a.out
- FILE* write 1417.9 ms
- FILE* read 1292.59 ms
- fstream write 3214.02 ms
- fstream read 3052.56 ms
- $ ./a.out
- FILE* write 1428.98 ms
- FILE* read 196.902 ms
- fstream write 3343.69 ms
- fstream read 2285.93 ms
- FILE* file = fopen("test_file_write", "wb");
- fwrite(buffer, 1, BUFFER_SIZE, file);
- fclose(file);
- std::ofstream stream("test_stream_write", std::ios::binary);
- stream.write(buffer, BUFFER_SIZE);
- Running Time Self Symbol Name
- 3266.0ms 66.9% 0,0 std::__1::basic_ostream<char, std::__1::char_traits<char> >::write(char const*, long)
- 3265.0ms 66.9% 2145,0 std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsputn(char const*, long)
- 1120.0ms 22.9% 7,0 std::__1::basic_filebuf<char, std::__1::char_traits<char> >::overflow(int)
- 1112.0ms 22.7% 2,0 fwrite
- 1127.0ms 23.0% 0,0 fwrite
- clock_gettime(CLOCK_REALTIME, {1411978373, 114560081}) = 0
- open("test", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
- writev(3, [{NULL, 0}, {"