#include <iostream>
#include <cstring>
using namespace std;
int main(){
int j;
const int n = 100000;
double *a1p, *b1p, *c1p, *d1p;
#ifdef ALLOCATE_SEPERATE
double *a1 = (double*)malloc(n * sizeof(double));
double *b1 = (double*)malloc(n * sizeof(double));
double *c1 = (double*)malloc(n * sizeof(double));
double *d1 = (double*)malloc(n * sizeof(double));
#else
double *a1 = (double*)malloc(n * sizeof(double) * 4);
double *b1 = a1 + n;
double *c1 = b1 + n;
double *d1 = c1 + n;
#endif
// Zero the data to prevent any chance of denormals.
memset(a1,0,n * sizeof(double));
memset(b1,0,n * sizeof(double));
memset(c1,0,n * sizeof(double));
memset(d1,0,n * sizeof(double));
// Print the addresses
cout << a1 << endl;
cout << b1 << endl;
cout << c1 << endl;
cout << d1 << endl;
clock_t start = clock();
int c = 0;
while (c++ < 10000){
#if ONE_LOOP
for (a1p = a1, b1p = b1, c1p = c1, d1p = d1, j = n;
j; a1p++, b1p++, c1p++, d1p++, j--)
{
*a1p += *b1p;
*c1p += *d1p;
}
#else
for (a1p = a1, b1p = b1, j = n;
j; a1p++, b1p++, j--)
{
*a1p += *b1p;
}
for (c1p = c1, d1p = d1, j = n;
j; c1p++, d1p++, j--)
{
*c1p += *d1p;
}
#endif
}
clock_t end = clock();
cout << "seconds = " << (double)(end - start) / CLOCKS_PER_SEC << endl;
system("pause");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCl7CglpbnQgajsKICAgIGNvbnN0IGludCBuID0gMTAwMDAwOwogICAgZG91YmxlICphMXAsICpiMXAsICpjMXAsICpkMXA7CgojaWZkZWYgQUxMT0NBVEVfU0VQRVJBVEUKICAgIGRvdWJsZSAqYTEgPSAoZG91YmxlKiltYWxsb2MobiAqIHNpemVvZihkb3VibGUpKTsKICAgIGRvdWJsZSAqYjEgPSAoZG91YmxlKiltYWxsb2MobiAqIHNpemVvZihkb3VibGUpKTsKICAgIGRvdWJsZSAqYzEgPSAoZG91YmxlKiltYWxsb2MobiAqIHNpemVvZihkb3VibGUpKTsKICAgIGRvdWJsZSAqZDEgPSAoZG91YmxlKiltYWxsb2MobiAqIHNpemVvZihkb3VibGUpKTsKI2Vsc2UKICAgIGRvdWJsZSAqYTEgPSAoZG91YmxlKiltYWxsb2MobiAqIHNpemVvZihkb3VibGUpICogNCk7CiAgICBkb3VibGUgKmIxID0gYTEgKyBuOwogICAgZG91YmxlICpjMSA9IGIxICsgbjsKICAgIGRvdWJsZSAqZDEgPSBjMSArIG47CiNlbmRpZgoKICAgIC8vICBaZXJvIHRoZSBkYXRhIHRvIHByZXZlbnQgYW55IGNoYW5jZSBvZiBkZW5vcm1hbHMuCiAgICBtZW1zZXQoYTEsMCxuICogc2l6ZW9mKGRvdWJsZSkpOwogICAgbWVtc2V0KGIxLDAsbiAqIHNpemVvZihkb3VibGUpKTsKICAgIG1lbXNldChjMSwwLG4gKiBzaXplb2YoZG91YmxlKSk7CiAgICBtZW1zZXQoZDEsMCxuICogc2l6ZW9mKGRvdWJsZSkpOwoKICAgIC8vICBQcmludCB0aGUgYWRkcmVzc2VzCiAgICBjb3V0IDw8IGExIDw8IGVuZGw7CiAgICBjb3V0IDw8IGIxIDw8IGVuZGw7CiAgICBjb3V0IDw8IGMxIDw8IGVuZGw7CiAgICBjb3V0IDw8IGQxIDw8IGVuZGw7CgogICAgY2xvY2tfdCBzdGFydCA9IGNsb2NrKCk7CgogICAgaW50IGMgPSAwOwogICAgd2hpbGUgKGMrKyA8IDEwMDAwKXsKCiNpZiBPTkVfTE9PUAogICAgICAgIGZvciAoYTFwID0gYTEsIGIxcCA9IGIxLCBjMXAgPSBjMSwgZDFwID0gZDEsIGogPSBuOwogICAgICAgIAkgajsgYTFwKyssIGIxcCsrLCBjMXArKywgZDFwKyssIGotLSkKICAgICAgICB7CiAgICAgICAgCSphMXAgKz0gKmIxcDsKICAgICAgICAJKmMxcCArPSAqZDFwOwogICAgICAgIH0KI2Vsc2UKICAgICAgICBmb3IgKGExcCA9IGExLCBiMXAgPSBiMSwgaiA9IG47CiAgICAgICAgCSBqOyBhMXArKywgYjFwKyssIGotLSkKICAgICAgICB7CiAgICAgICAgCSphMXAgKz0gKmIxcDsKICAgICAgICB9CiAgICAgICAgZm9yIChjMXAgPSBjMSwgZDFwID0gZDEsIGogPSBuOwogICAgICAgIAkgajsgYzFwKyssIGQxcCsrLCBqLS0pCiAgICAgICAgewogICAgICAgIAkqYzFwICs9ICpkMXA7CiAgICAgICAgfSAgICAgICAgCiNlbmRpZgoKICAgIH0KCiAgICBjbG9ja190IGVuZCA9IGNsb2NrKCk7CiAgICBjb3V0IDw8ICJzZWNvbmRzID0gIiA8PCAoZG91YmxlKShlbmQgLSBzdGFydCkgLyBDTE9DS1NfUEVSX1NFQyA8PCBlbmRsOwoKICAgIHN5c3RlbSgicGF1c2UiKTsKICAgIHJldHVybiAwOwp9