qberik

Untitled

Nov 30th, 2021 (edited)
484
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <chrono>
  4.  
  5. // функция которая просто генерит случайную строку заданой длинны
  6. char *rand_string(char *str, size_t size)
  7. {
  8.     const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJK...";
  9.     if (size) {
  10.         --size;
  11.         for (size_t n = 0; n < size; n++) {
  12.             int key = rand() % (int) (sizeof charset - 1);
  13.             str[n] = charset[key];
  14.         }
  15.         str[size] = '\0';
  16.     }
  17.     return str;
  18. }
  19.  
  20. int main(){
  21.   const int COUNT = 9;
  22.   int N = 1;
  23.   int string_size = 100000000;
  24.   for( int _ = 0; _ < COUNT; _++ ){
  25.  
  26.     // выделение памяти
  27.     char **words = (char **) malloc( sizeof( char * ) * N );
  28.     for( int i = 0; i < N; i++ ){
  29.       *( words + i ) = ( char * ) malloc( sizeof( char ) * string_size );
  30.     }
  31.  
  32.     // генерация строк
  33.     for( int i = 0; i < N; i++ ){
  34.       rand_string( *( words + i ), string_size );
  35.     }
  36.  
  37.     auto begin1 = std::chrono::high_resolution_clock::now();
  38.     // вывод cout
  39.     for( int i = 0; i < N; i++ ){
  40.       std::cout << *( words + i ) << std::endl;
  41.     }
  42.     auto end1 = std::chrono::high_resolution_clock::now();
  43.     auto dt1 = std::chrono::duration_cast<std::chrono::nanoseconds>(end1 - begin1);
  44.  
  45.     auto begin2 = std::chrono::high_resolution_clock::now();
  46.     // вывод printf
  47.     for( int i = 0; i < N; i++ ){
  48.       printf("%s\n",*( words + i ) );
  49.     }
  50.     auto end2 = std::chrono::high_resolution_clock::now();
  51.     auto dt2 = std::chrono::duration_cast<std::chrono::nanoseconds>(end2 - begin2);
  52.     std::cerr << N << " строк, каждая длинной " << string_size << std::endl;
  53.     std::cerr << "cout   " << dt1.count() << std::endl;
  54.     std::cerr << "printf " << dt2.count() << std::endl;
  55.     N *= 10;
  56.     string_size /= 10;
  57.   }
  58.   return 0;
  59. }
RAW Paste Data