Created
June 3, 2015 07:45
-
-
Save cfr/f219791d8ff791033cb0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// clang -std=c99 -O3 cpy-vs-cat.c | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include <string.h> | |
#include <mach/mach_time.h> | |
const int e6 = 1000000; | |
#define repeat for(int j = 0; j < e6; j++) | |
void flush() { fflush(stdout); } | |
int main() { | |
double pcat = 1.0/0; | |
for(size_t sz = 0; sz < 1 << 20; sz += sz, sz += 1024*!sz) { | |
printf("10⁶×%9zu b", sz), flush(); | |
char* to = calloc(2*sz+1, sizeof(char)); | |
char* from = calloc(sz+1, sizeof(char)); | |
memset(to, 1, sz); | |
memset(from, 1, sz); | |
printf(" ⇒ "), flush(); | |
uint64_t t = mach_absolute_time(); // nsec | |
repeat { strcat(to, from); to[sz] = 0; } | |
double dcat = (mach_absolute_time() - t) / e6; // msec | |
printf("%9.1f (×%.0f) : ", dcat, dcat/pcat), flush(); | |
t = mach_absolute_time(); | |
repeat { memcpy(to + sz, from, sz+1); } | |
double dcpy = (double)((mach_absolute_time() - t)) / e6; | |
printf("%9.1f, cat = %.3f cpy)\n", dcpy, dcat/dcpy); | |
free(from), free(to); | |
pcat = dcat; | |
} | |
} | |
/* rmpb14 | |
10⁶× 0 b ⇒ 18.0 (×0) : 3.9, cat = 4.613 cpy) | |
10⁶× 1024 b ⇒ 114.0 (×6) : 16.3, cat = 6.984 cpy) | |
10⁶× 2048 b ⇒ 190.0 (×2) : 34.0, cat = 5.588 cpy) | |
10⁶× 4096 b ⇒ 342.0 (×2) : 52.2, cat = 6.552 cpy) | |
10⁶× 8192 b ⇒ 630.0 (×2) : 117.6, cat = 5.355 cpy) | |
10⁶× 16384 b ⇒ 1694.0 (×3) : 193.5, cat = 8.754 cpy) | |
10⁶× 32768 b ⇒ 3644.0 (×2) : 1351.9, cat = 2.695 cpy) | |
10⁶× 65536 b ⇒ 7561.0 (×2) : 2690.4, cat = 2.810 cpy) | |
10⁶× 131072 b ⇒ 16877.0 (×2) : 5391.1, cat = 3.131 cpy) | |
10⁶× 262144 b ⇒ 36838.0 (×2) : 13533.8, cat = 2.722 cpy) | |
10⁶× 524288 b ⇒ 77799.0 (×2) : 29948.5, cat = 2.598 cpy) | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment