#include <iostream>
#include <stdio.h>
#include <chrono>
#include <cstring>
using namespace std;
unsigned int strcpylen(char dest[], const char source[]) {
unsigned int i = 0;
while ((dest[i] = source[i]) != '\0') {
i++;
}
return i;
}
int main() {
const char *str1 = "balls!";
char str2[20];
auto start = chrono::steady_clock::now();
for (int i = 0; i < 10000; ++i) {
volatile int len = strcpylen(str2, str1);
}
auto end = chrono::steady_clock::now();
auto diff = end - start;
cout << "part1: " << chrono::duration <double, nano> (diff).count() << endl;
start = chrono::steady_clock::now();
for (int i = 0; i < 10000; ++i) {
volatile int len;
strcpy(str2, str1);
len = strlen(str2);
}
end = chrono::steady_clock::now();
diff = end - start;
cout << "part2: " << chrono::duration <double, nano> (diff).count() << endl;
// your code goes here
start = chrono::steady_clock::now();
for (int i = 0; i < 10000; ++i) {
volatile int len = strlen(str1);
memcpy(str2, str1,len+1);
}
end = chrono::steady_clock::now();
diff = end - start;
cout << "part3: " << chrono::duration <double, nano> (diff).count() << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGNzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKdW5zaWduZWQgaW50IHN0cmNweWxlbihjaGFyIGRlc3RbXSwgY29uc3QgY2hhciBzb3VyY2VbXSkgewogICAgdW5zaWduZWQgaW50IGkgPSAwOwogICAgd2hpbGUgKChkZXN0W2ldID0gc291cmNlW2ldKSAhPSAnXDAnKSB7CiAgICAgICBpKys7CiAgICB9CiAgICByZXR1cm4gaTsgCn0KCgppbnQgbWFpbigpIHsKCQoJY29uc3QgY2hhciAqc3RyMSA9ICJiYWxscyEiOwoJY2hhciBzdHIyWzIwXTsKCQoJCglhdXRvIHN0YXJ0ID0gY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewoKCQl2b2xhdGlsZSBpbnQgbGVuID0gc3RyY3B5bGVuKHN0cjIsIHN0cjEpOwoJfQoJCglhdXRvIGVuZCA9IGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKIAogICAgYXV0byBkaWZmID0gZW5kIC0gc3RhcnQ7CgkKCWNvdXQgPDwgInBhcnQxOiAiIDw8IGNocm9ubzo6ZHVyYXRpb24gPGRvdWJsZSwgbmFubz4gKGRpZmYpLmNvdW50KCkgPDwgZW5kbDsKCQoJc3RhcnQgPSBjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CgoJCXZvbGF0aWxlIGludCBsZW47IAoJCXN0cmNweShzdHIyLCBzdHIxKTsKCQlsZW4gID0gc3RybGVuKHN0cjIpOwoJfQoJCgllbmQgPSBjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAKICAgIGRpZmYgPSBlbmQgLSBzdGFydDsKCQoJY291dCA8PCAicGFydDI6ICIgPDwgY2hyb25vOjpkdXJhdGlvbiA8ZG91YmxlLCBuYW5vPiAoZGlmZikuY291bnQoKSA8PCBlbmRsOwoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJc3RhcnQgPSBjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CgoJCXZvbGF0aWxlIGludCBsZW4gPSBzdHJsZW4oc3RyMSk7CgkJbWVtY3B5KHN0cjIsIHN0cjEsbGVuKzEpOwoJfQoJCgllbmQgPSBjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAKICAgIGRpZmYgPSBlbmQgLSBzdGFydDsKCQoJY291dCA8PCAicGFydDM6ICIgPDwgY2hyb25vOjpkdXJhdGlvbiA8ZG91YmxlLCBuYW5vPiAoZGlmZikuY291bnQoKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=