Beginner Exercises

Pages: 1... 45678... 16
Jan 16, 2010 at 3:50am
Aye ya... and I guess you think a = 5+3; is slower than a = 8; because it has an extra addition, right?

There are some compilers that do not do this though


Name one.

AFAIK none exist*. I think you are just assuming that there is such a compiler.

And even if there WERE such a stupid compiler, one extra condition check would be the least of its problems.



(* I'm sure you could write such a compiler to spite me, or perhaps find the first ever C compiler or something equally obscure -- but in terms of fully functional compilers that more than 10 people actually still use today... I'm sure there are none)

If you'd like, go and try that with every compiler and see if it's the same as some will give different results.


You're the one who made the initial claim. And you've since just been spouting conjecture (or citing other people's conjecture).

Tits of GTFO =P

I tested on my machine. I got identical results. Why don't you test on yours and tell me what the results are.


EDIT:

I just want to clarify my point here.

I don't care if you want to use for(;;). That's great. I don't have any problem with that. Each programmer can have his own coding style, and that's a wondering thing.

My problem is when you start making baseless claims that your preference in coding style is more efficient than someone else's preference in an attempt to sway them into adopting your style.

If while(1) really did have an extra conditional check, that's one thing (but even then... talk about micromanaging)... but that's such an absurd notion it's almost laughable.
Last edited on Jan 16, 2010 at 5:18am
Jan 16, 2010 at 11:17am
computerquip wrote:
There are some compilers that do not do this though

Even if they exist, they do not comply to the standard

C++ standards §6.5.3:

The for statement
for ( for-init-statement conditionopt ; expressionopt ) statement
is equivalent to
1
2
3
4
5
6
7
{
          for-init-statement
          while ( condition ) {
                   statement
                   expression ;
          }
}

[...]

Either or both of the condition and the expression can be omitted. A missing condition makes the implied
while clause equivalent to while(true).

Jan 16, 2010 at 2:42pm
disassembly taken from VC++ 2008:
for(;;);
0041138E jmp main+1Eh (41138Eh)
while(true);
00411390 mov eax,1
00411395 test eax,eax
00411397 je main+2Bh (41139Bh)
00411399 jmp main+20h (411390h)
do;
while(true);

0041139B mov eax,1
004113A0 test eax,eax
004113A2 jne main+2Bh (41139Bh)
Jan 16, 2010 at 5:25pm
Now try it with optimizations on.
Jan 16, 2010 at 7:14pm
Well I can honestly say I am surprised. This makes me want to check VS myself just to see with my own eyes (if only I could!)

I guess I must retract my earlier statement about such a compiler not existing. My apologies!
Jan 16, 2010 at 9:27pm
Why on earth would you need the 'most efficient' infinite loop?! Embedded systems or something?
Last edited on Jan 16, 2010 at 9:28pm
Jan 17, 2010 at 1:44am
Well, any program should strive to be as fast as possible.
Jan 17, 2010 at 1:55am
For overall optimizations, I agree.

For micromanaging optimizations, I strongly disagree.

There was a time way back, when games had to do pixel work on a 320x240 display. They ended up doing this:

 
pixels[ (y << 8) + (y << 6) + x ] = foo;


The idea is that:

1
2
3
(y<<8)+(y<<6)  =
(y*256)+(y*64) =
y*320


But because multiplication used to be slow, having two bitshifts and an addition was faster, so games were coded this way for a speed boost.

The problem is... multiplication sped up. And ultimately the bitshifting route became the slower option. And while a compiler could easy compile (y*320) as (y<<8)+(y<<6) if it would determine there'd be a speed gain, doing the reverse isn't as obvious.

Bottom line: you're better off leaving these kinds of optimizations to the compiler. It has a stronger grasp of the bigger picture than you do (most of the time)

-----------------
That said...

for(;;) does not have any such detriment to it, so there's no reason you shouldn't be using it. So in that sense your point is strong, and I agree with you.
Last edited on Jan 17, 2010 at 1:57am
Jan 17, 2010 at 1:58am
I thought bitwise shifting was still faster.

Damn emulator tutorials must be out of date >:(
Jan 17, 2010 at 2:15am
1 shift is [probably] faster than 1 multiply. And in such an event, the compiler would recognize it. ie: foo *= 256 is likely to get compiled to foo <<= 8 if there's a speed difference.

But two shifts AND an addition? faster than 1 multiplication? Doubtful.

Besides... the computer/program is only as fast as the slowest link in the chain. Processers now are so bloody fast that you're going to get bottlenecked on something entirely different. You're much more likely to have speed issues with memory accesses than with computational numbercrunching.

Everybody these days seems to have at least a 2GHz processor, but how much RAM floating around actually has 2GHz access speed? Or 2GHz bus speed?
Jan 17, 2010 at 2:29am
Well, according to the newest piece of reference I can find that includes clock counts, which is for 486, MUL using 32-bit operands can take as much as 42 clocks, while ADD takes no more than 3, and shifts take between 2 and 4 cycles.
If you can find a reference for a newer processor, however...
Jan 17, 2010 at 2:41am
You're much more likely to have speed issues with memory accesses

I agree there. CPUs have left memory in their wake. The fastest clocked memory was DDR3 at 2GHz (still, thats ridiculously fast); but DDR3 timings are quite high. I think the best for DDR3 I ever saw was 9-9-9-24, which is horrible.

On the subject of memory, I just bought 2 GiB of DDR3 RAM at 1333MHz... Then, when I'm 16 and can get a job, I'll buy the rest of the system. Just £537 left to go (I bought a motherboard, too).

Link to 2GHz clocked memory: http://www.patriotmemory.com/products/groupdetailp.jsp?prodgroupid=131&prodline=5&group=PC3-16000%20-%202000MHz%20Memory%20Modules&catid=51

Features

* Extreme Performance PC3-16000 (2000MHz)
* EPP Ready
* Equipped with advance aluminum heat-dispersing shields
* 100% Tested and Verified
* Lifetime Warranty
* RoHS Compliant

Translation:

* it's overclocked to ridiculous levels
* this sounds official
* we put heatsinks on it
* we ran memtest86+ on it for half an hour
* it works
* again, this sounds official
Last edited on Jan 17, 2010 at 8:09pm
Jan 18, 2010 at 12:52pm
* Lifetime Warranty
actually translates to: We guarantee this to work for at least a year, unless you make use of the over-clocking we have put in by default. In which case we guarantee this to work for 3months tops.

I envy you, at your age I was too busy smoking pot, skateboarding, and graphitting to worry about complicated things like studing programming... oh how I wish I could take it all back. Would have just been in time for the big boom ... :(
Last edited on Jan 18, 2010 at 12:56pm
Jan 20, 2010 at 3:23pm
For those that want unique names, I have a census list from american most popular names in 1987 or some such:
Last edited on Jan 20, 2010 at 9:51pm
Jan 20, 2010 at 3:24pm
GIRLSNAMES.TXT
Last edited on Jan 20, 2010 at 9:51pm
Jan 20, 2010 at 3:25pm

I have however deleted from the text the number of times each name was used. Still this is a useful for name generator or some such.
If you would like the files with the number of occurances as well just pm.

Kinda sad Jesus is 67th on the list.... Why on earth would you name you boy that?,Or I supposed why would 3000+ americans name their son Jesus in 1 year...
Last edited on Jan 20, 2010 at 9:52pm
Jan 20, 2010 at 5:10pm
closed account (S6k9GNh0)
omfg, fpaste it next time or something, holy crap.
Jan 20, 2010 at 8:01pm
Gee, thanks. That's what we needed. 1000+ lines of names to scroll down. With respect, you could have uploaded that to a site like pastebin, or this "fpaste" computerquip speaks of, which is presumably something similar.
Jan 20, 2010 at 9:53pm
whine whine, use your mice!
Jan 20, 2010 at 9:57pm
closed account (z05DSL3A)
whine whine, use your mice!

But I don't have a mouse, what can I do? (!)
Pages: 1... 45678... 16