[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-devel
Subject:    Re: Two optimization questions
From:       Michael Pyne <pynm0001 () comcast ! net>
Date:       2004-04-21 0:30:51
Message-ID: 200404202030.56967.pynm0001 () comcast ! net
[Download RAW message or body]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tuesday 20 April 2004 17:23, Adriaan de Groot wrote:
> [Perhaps better for kde-optimize, I know, although these questions are
> mostly code-clarity vs. extremely minor performance gains.]
>
> (1) Consider
>
> 	for (QStringList::constIterator i = l.begin() ; i!=l.end(); ++i) { .. }
>
> versus
>
> 	QStringList::constIterator e = l.end();
> 	for (QStringList::constIterator i = l.begin() ; i!=e; ++i) { .. }
>
> Is there really a big performance hit for the first?

It's one of those things that depends on the implementation.  I haven't looked 
at Qt's implementation of it, but if the end() call simply returns a 
constant, there's really no difference.  If the end() call has to look for 
the end of the container, then it makes more sense to do (2).

BTW, I actually find (2) more readable anyways, at least if e was named a 
little more descriptively. ;-).

> (2) Consider function foo(), which spans 96 lines (that's 4 screenfuls). It
> consists of several identifiable blocks of functionality, so I _could_
> write it like
>
> 	T foo() { doThis(); doThat(); doItWithAWhiffleBallBat(); doRest(); }
>
> What's the performance hit here? I'd hate to have real function-call
> overhead for those functions, and I'd hate for them to be external symbols,
> since they'd slow down linkage to no effect. Can I count on the compiler to
> inline these in foo?

You have the right idea by declaring it static.  The symbol won't get exported 
that way, unless it is a member function of a class.

If you also declare it inline, the compiler has the option of inlining it.  
AFAIK, the only reason a compiler wouldn't is because A: You told it not to 
(-fno-inline for GCC), B: You took the address of the function, and C: I 
forgot :-).

Regards,
 - Michael Pyne
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)

iD8DBQFAhcC/qjQYp5Omm0oRAv6XAKCho69emlIjzOjVgjRm6ywSQpGa8ACgw+i6
RGrgzb5E4MuPUHIz7Jc6I/Q=
=+D3H
-----END PGP SIGNATURE-----
 
>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic