This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C++: Why do we nreverse CLASSTYPE_TAGS


Jason Merrill <jason at redhat dot com> writes:

| On 24 Mar 2003 13:02:26 -0800, Mark Mitchell <mark at codesourcery dot com> wrote:
| 
| > On Mon, 2003-03-24 at 11:56, Matt Austern wrote:
| >> On Monday, March 24, 2003, at 11:21 AM, Mark Mitchell wrote:
| >> 
| >> >> OK, I'll experiment with that approach.  What threasold would you put
| >> >> for "lots"?
| >> >
| >> > I dunno.  Probably 10 or so, to start.  With fewer than that, hashing
| >> > can't possibly be a win.
| >> 
| >> How expensive is the hash function?  Unless it's pretty extreme, I'd be 
| >> surprised if you needed to get all the way to 10 to get a win.
| >
| > Well, it's a hash *function*; you get to make an extra function call.
| >
| > As opposed to roughly:
| >
| >   for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
| >    if (DECL_NAME (x) == name)
| >      break;
| 
| Something that seems to have been missed in this discussion is that we
| don't currently do a linear search for field lookups.  We do a binary
| search, which should be plenty fast.

Yes.  However, a linear search is done when looking for nested-types
in decl.c:lookup_tag().  Replacing current_binding_level->tags with a 
hash-table turned out to affect CLASSTYPE_TAGS also since we do some
random assignments here and there...

-- Gaby


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]