#include <iostream>
#include <sstream>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
long unsigned tsc_low,
tsc_high,
tsc_low1,
tsc_high1;
} TscMeasurement;
#define rdtsc(low,high) \
__asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
inline void tsc_start_measurement (TscMeasurement *tm) {
rdtsc (tm->tsc_low, tm->tsc_high);
}
inline void tsc_stop_measurement (TscMeasurement *tm) {
rdtsc (tm->tsc_low1, tm->tsc_high1);
}
inline long long unsigned tsc_get_ticks (const TscMeasurement *tm)
{
long long unsigned tsc, tsc1;
tsc = (long long unsigned) tm->tsc_high << 32 |
((long long unsigned) tm->tsc_low & 0xffffffff);
tsc1 = (long long unsigned) tm->tsc_high1 << 32 |
((long long unsigned) tm->tsc_low1 & 0xffffffff);
return tsc1 - tsc;
}
#ifdef __cplusplus
}
#endif
int main() {
// your code goes here
TscMeasurement ttime;
volatile long long i;
std::stringbuf::pos_type begin_pos(0);
std::stringbuf buffer(std::ios_base::out);
std::ostream os (&buffer);
tsc_start_measurement(&ttime);
for(i=0; i < 10000000UL; i++) {
buffer.pubseekpos(begin_pos, std::ios_base::out);
os << i << " " << "bla-bla-bla" << -10 << 1.3f << std::endl;
}
tsc_stop_measurement(&ttime);
printf ("Time: %llu\n", tsc_get_ticks(&ttime) );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KIAojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgogCnR5cGVkZWYgc3RydWN0IHsKCWxvbmcgdW5zaWduZWQJdHNjX2xvdywKCQkJCQl0c2NfaGlnaCwKCQkJCQl0c2NfbG93MSwKCQkJCQl0c2NfaGlnaDE7Cn0gVHNjTWVhc3VyZW1lbnQ7CiAKI2RlZmluZSByZHRzYyhsb3csaGlnaCkgXAogICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZHRzYyIgOiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSkKIAppbmxpbmUgdm9pZCB0c2Nfc3RhcnRfbWVhc3VyZW1lbnQgKFRzY01lYXN1cmVtZW50ICp0bSkgewoJcmR0c2MgKHRtLT50c2NfbG93LCB0bS0+dHNjX2hpZ2gpOwp9CiAKaW5saW5lIHZvaWQgdHNjX3N0b3BfbWVhc3VyZW1lbnQgKFRzY01lYXN1cmVtZW50ICp0bSkgewoJcmR0c2MgKHRtLT50c2NfbG93MSwgdG0tPnRzY19oaWdoMSk7Cn0KIAppbmxpbmUgbG9uZyBsb25nIHVuc2lnbmVkIHRzY19nZXRfdGlja3MgKGNvbnN0IFRzY01lYXN1cmVtZW50ICp0bSkKewoJbG9uZyBsb25nIHVuc2lnbmVkIHRzYywgdHNjMTsKCXRzYyA9IChsb25nIGxvbmcgdW5zaWduZWQpIHRtLT50c2NfaGlnaCA8PCAzMiB8CgkJKChsb25nIGxvbmcgdW5zaWduZWQpIHRtLT50c2NfbG93ICYgMHhmZmZmZmZmZik7Cgl0c2MxID0gKGxvbmcgbG9uZyB1bnNpZ25lZCkgdG0tPnRzY19oaWdoMSA8PCAzMiB8CgkJKChsb25nIGxvbmcgdW5zaWduZWQpIHRtLT50c2NfbG93MSAmIDB4ZmZmZmZmZmYpOwoJcmV0dXJuIHRzYzEgLSB0c2M7Cn0KIAojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKIAppbnQgbWFpbigpIHsKCQkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglUc2NNZWFzdXJlbWVudCB0dGltZTsKCXZvbGF0aWxlIGxvbmcgbG9uZyBpOwoJc3RkOjpzdHJpbmdidWY6OnBvc190eXBlIGJlZ2luX3BvcygwKTsKCXN0ZDo6c3RyaW5nYnVmIGJ1ZmZlcihzdGQ6Omlvc19iYXNlOjpvdXQpOwoJc3RkOjpvc3RyZWFtIG9zICgmYnVmZmVyKTsKIAoJdHNjX3N0YXJ0X21lYXN1cmVtZW50KCZ0dGltZSk7Cglmb3IoaT0wOyBpIDwgMTAwMDAwMDBVTDsgaSsrKSB7CgkJYnVmZmVyLnB1YnNlZWtwb3MoYmVnaW5fcG9zLCBzdGQ6Omlvc19iYXNlOjpvdXQpOwoJCW9zIDw8IGkgPDwgIiAgICIgPDwgImJsYS1ibGEtYmxhIiA8PCAtMTAgPDwgMS4zZiA8PCBzdGQ6OmVuZGw7Cgl9Cgl0c2Nfc3RvcF9tZWFzdXJlbWVudCgmdHRpbWUpOwogCglwcmludGYgKCJUaW1lOiAlbGx1XG4iLCB0c2NfZ2V0X3RpY2tzKCZ0dGltZSkgKTsKIAoJcmV0dXJuIDA7Cn0=