Table lookups - this is pretty definitive

Iain Buclaw ibuclaw at gdcproject.org
Mon Apr 7 02:25:13 PDT 2014


On 1 April 2014 19:35, Walter Bright <newshound2 at digitalmars.com> wrote:
> Try this benchmark comparing various classification schemes:

GDC turns switches into table lookups, and speeds are comparable on my
system, though your little hack is appears faster in release builds.

Tests are with 1 million runs.

---
Non-release run:
Milliseconds 1797 1642 1501 1463

Non-release run, no bounds checking:
Milliseconds 1730 1611 1483 1512

Release run:
Milliseconds 1753 1633 1471 1528

Optimised run:
Milliseconds 0 0 0 0
---

It is interesting that switches seem to take longer when bounds
checking is turned off, and even longer when in release mode.  However
this is not very conclusive as I can't test with optimisations turned
on.  Unfortunately for your small program, gcc is too smart and
optimises everything away.

---
bool isIdentifierChar3(ubyte c)
{
    switch(c)
    {
        case '0': .. case '9':
        case 'A': .. case 'Z':
        case 'a': .. case 'z':
        case '$':
        case '_':
            return true;

        default:
            return false;
    }
}


More information about the Digitalmars-d mailing list