Public bug reported:
Binary package hint: gcc-4.4
According to "/usr/include/c++/4.4.3/bits/stl_algobase.h", on regarding
std::copy, "This inline function will boil down to a call to @c memmove
whenever possible." But it is not true, you can see in a very simple
test:
test_copy.cpp:
int main()
{
int *b1 = new int[1024*1024];
int *b2 = new int[1024*1024];
for(int i = 0; i < 10000; ++i) {
std::copy(b1, b1 + (1024*1024), b2);
std::copy(b2, b2 + (1024*1024), b1);
}
}
teste_mmove.cpp:
int main()
{
int *b1 = new int[1024*1024];
int *b2 = new int[1024*1024];
for(int i = 0; i < 10000; ++i) {
memmove(b2, b1, 1024*1024);
memmove(b1, b2, 1024*1024);
}
}
$ time ./test_copy
real 0m14.060s
user 0m14.040s
sys 0m0.000s
$ time ./test_mmove
real 0m2.310s
user 0m2.310s
sys 0m0.000s
The execution time of std::copy is about 600% of memmove's time in this
test (and I don't know why the header file talks about memmove, and not
memcpy). It is certainly a bug, because it contradicts what the header
says, and there should be no reason to std::copy to be slower than
memcpy when applied to bare pointers.
Tested with:
gcc-4.4 - 4.4.3-4ubuntu5
libstdc++6-4.4-dev - 4.4.3-4ubuntu5
** Affects: gcc-4.4 (Ubuntu)
Importance: Undecided
Status: New
--
std::copy is much slower than memmove
https://bugs.launchpad.net/bugs/656980
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs