fork(2) download
  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdint.h>
  5.  
  6. void reverse(char[], int);
  7.  
  8. int main()
  9. {
  10. clock_t start, end;
  11. char s[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
  12. long i;
  13.  
  14. int len = strlen(s);
  15.  
  16. start = clock();
  17. for (i = 0; i < 10000001; i++) {
  18. reverse(s, len);
  19. }
  20. end = clock();
  21.  
  22. printf("%lf\n", (double)(end-start)/CLOCKS_PER_SEC);
  23. printf("%s\n", s);
  24. return 0;
  25. }
  26.  
  27. void reverse(char s[], int len)
  28. {
  29. uint64_t *li = (uint64_t*) s, *lj = (uint64_t*)(s+len-8), ltmp;
  30. while (li < lj-1) {
  31. ltmp = __builtin_bswap64(*li);
  32. *li = __builtin_bswap64(*lj);
  33. *lj = ltmp;
  34. li++; lj--;
  35. }
  36. char *ci = (char*)li, *cj = (char*)lj, ctmp;
  37. while (ci < cj) {
  38. ctmp = *ci; *ci = *cj; *cj = ctmp;
  39. ci++; cj--;
  40. }
  41. }
  42.  
Success #stdin #stdout 0.26s 9432KB
stdin
Standard input is empty
stdout
0.270869
.murobal tse di mina tillom tnuresed aiciffo iuq apluc ni tnus ,tnediorp non tatadipuc taceacco tnis ruetpecxE .rutairap allun taiguf ue erolod mullic esse tilev etatpulov ni tiredneherper ni rolod eruri etua siuD .tc odomonsequamoc ae xe piuqila tu isin sirobal ocmallu noitaticrexe durtson siuq ,mainev minim da mine tU .auqila angam erolod te erobal tu tnudidicni ropmet domsuie od des ,tile gnicsipida rutetcesnoc ,tema tis rolod muspi meroL