fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4.  
  5. const int size = 100000000;
  6.  
  7. static char s_str[size];
  8.  
  9. std::string test1()
  10. {
  11. return std::string(s_str);
  12. }
  13.  
  14. void test2(std::string& s)
  15. {
  16. s = s_str;
  17. }
  18.  
  19. int main()
  20. {
  21. memset(s_str, 'x', size - 1);
  22.  
  23. std::string s(s_str);
  24. clock_t c1, c2, c3, c4, c5, c6;
  25.  
  26. // コピー
  27. c1 = clock();
  28. for (int i = 0; i < 10; i++) {
  29. s = static_cast<const std::string&>(test1());
  30. }
  31. c2 = clock();
  32.  
  33. // ムーブ
  34. c3 = clock();
  35. for (int i = 0; i < 10; i++) {
  36. s = test1();
  37. }
  38. c4 = clock();
  39.  
  40. // バッファの再利用
  41. c5 = clock();
  42. for (int i = 0; i < 10; i++) {
  43. test2(s);
  44. }
  45. c6 = clock();
  46.  
  47. printf("コピー : %d\n", static_cast<int>(c2 - c1));
  48. printf("ムーブ : %d\n", static_cast<int>(c4 - c3));
  49. printf("再利用 : %d\n", static_cast<int>(c6 - c5));
  50. }
  51.  
Success #stdin #stdout 3.76s 100480KB
stdin
Standard input is empty
stdout
コピー : 1310000
ムーブ : 1320000
再利用 : 890000