This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/66416] New: Regression: string::find 3.5 times slower than memrchr
- From: "neleai at seznam dot cz" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 04 Jun 2015 08:17:32 +0000
- Subject: [Bug libstdc++/66416] New: Regression: string::find 3.5 times slower than memrchr
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66416
Bug ID: 66416
Summary: Regression: string::find 3.5 times slower than memrchr
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: neleai at seznam dot cz
Target Milestone: ---
Same problem as with strstr also applies here. As we know length we could
compare that to memrchr. Again instead simply calling that an implementation is
3.5 times slower on my sandy_bridge.
#include <cstring>
#include <cstdlib>
#include <string>
using namespace std;
int
main()
{
int i;
char s[10000];
for (i = 0; i < 10000; i++)
s[i] = ((unsigned) rand() % 128) + 1;
s[9999] = 0;
int sum = 0;
std::string foo = s;
std::string bar;
char *needle = strdup("needle");
for (i = 0; i < 5000000; i++)
{
needle[0] = ((unsigned) rand() % 128) + 1;
#ifdef MEMRCHR
sum += (long) memrchr(s, needle[0],9999);
#else
sum += foo.find_last_of(needle[0]);
#endif
}
return sum;
}