Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #105891

Re: va_start without the first argument?

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c
Subject Re: va_start without the first argument?
Date 2017-03-12 22:40 +0100
Organization A noiseless patient Spider
Message-ID <oa4f3e$r2v$1@dont-email.me> (permalink)
References (8 earlier) <oa3mfq$3m6$1@dont-email.me> <oa3vea$39f$1@dont-email.me> <oa42ej$dms$1@dont-email.me> <oa49f0$79d$1@dont-email.me> <oa4csk$jd4$1@dont-email.me>

Show all headers | View raw


On 12/03/17 22:02, BartC wrote:
> On 12/03/2017 20:04, David Brown wrote:
>> On 12/03/17 19:04, BartC wrote:
>
>>> No, it makes it easier to compare how long things take to execute
>>> (rather than how long it takes /not/ to execute them as often happens
>>> with gcc).
>>
>> Yes, speed comparisons without optimisation are /always/ pointless.  You
>> can't compare the speed of two cars if you insist that they both stay in
>> first gear - even if they are two models from the same manufacturer.
>
> I would have to disagree. Comparing with optimisation on is like timing
> two cars along a route from A to B, but one decides to take a short cut.
> Or, if A and B are the same point and the route is circular, it doesn't
> bother to go anywhere at all.
>
> Yes, that will give a faster time. But it is totally useless for finding
> out exactly how long it /would/ have taken the car to drive the official
> route. (Imagine if you are testing two buses; they /have/ to use a
> certain route, otherwise passengers won't be happy either if the bus
> never turns up, or it's late because they chose the slower vehicle based
> on misleading tests.)

That analogy is now stretched well beyond breaking point...

>
> With gcc, I very often find it gives an extremely fast time for a task,
> but only because it hasn't bothered to do it at all, if it there's no
> point!

Of course the compiler will skip code that is not needed.  That is an 
important function of a compiler - it makes it easier to write more 
generic code, knowing that the compiler will handle the details.

If you want to time how long the code takes to do something, you need to 
understand how C works and write code that actually does something, at 
least according to the rules of C.

So if you want to time the results of "bigCalculation()" and write code 
like:

static int bigCalculation(int n) {
	...
}

double test(void) {
	time_t startTime = time(0);
	int x = bigCalculation(100);
	time_t endTime = time(0);
	return difftime(startTime, endTime);
}

the compiler can see that bigCalculation is being called with a known 
constant argument, and the return value is unused - it is very likely 
that it can be omitted altogether.

Instead, write:

volatile int n;
volatile int x;
double test(void) {
	time_t startTime = time(0);
	n = 100;
	x = bigCalculation(n);
	time_t endTime = time(0);
	return difftime(startTime, endTime);
}

By making "n" volatile, the compiler will not assume it is a 
compile-time constant, and it will write it then read it.  Similarly, by 
making "x" volatile, the compiler is obliged to write the correct value 
to it.  Unless it can figure out a fixed value for bigCalculation 
independent of the argument, it is going to have to carry out the 
calculation.


And now you can do your compilation with optimisation enabled so that 
the compiler can generate sensible code.

>
>>> Anyway, if I use -O3 for both, then the 32-bit version is 12% faster!
>>> Despite having fewer and narrower registers.
>>
>> And there you have an interesting comparison.  This is Windows, I take
>> it?
>
> Yes. The only Linux I have where I can test 32- and 64-bit programs
> together is a virtual one. And there, 64-bit code is 5-6% faster than
> 32-bit. (But both seem to run about 1/3 slower than Windows on the same
> machine on the same task. The Linux gcc is 6.x while the Windows one 5.x)

Virtualisation makes it hard to compare results, especially if it is an 
older cpu with limited hardware support for virtualisation.  And of 
course, I have no idea what your programs are - there can be many 
reasons for performance differences.

>
>> Different programs will see different gains or loses in speed here.  You
>> will want to test quite a few different programs to get more general
>> results.
>
> All of my language-related programs (all computationally intensive with
> little use of external libraries) show the same pattern.
>
> Only where there a lot of actual 64-bit arithmetic going on, does a
> 64-bit build show an obvious difference.
>
>> Leaf functions are often quite short, and often would not need a stack
>> frame at all if it were not for this extra allocation.
>
> Possibly, with a leaf function taking no more than 4 parameters, and not
> doing stuff with variable arguments or taking addresses of the
> parameters, you can get away without those 32 bytes allocated by the
> caller. So it can be called with or without.
>

Few functions take more than four parameters, and even fewer functions 
take variable arguments - so that applies to most functions.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-10 11:57 -0800
  Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-10 12:04 -0800
  Re: va_start without the first argument? Keith Thompson <kst-u@mib.org> - 2017-03-10 12:32 -0800
    Re: va_start without the first argument? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2017-03-10 15:51 -0500
    Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-10 14:36 -0800
      Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-10 14:53 -0800
        Re: va_start without the first argument? Robert Wessel <robertwessel2@yahoo.com> - 2017-03-10 17:14 -0600
          Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-10 15:37 -0800
            Re: va_start without the first argument? Robert Wessel <robertwessel2@yahoo.com> - 2017-03-10 23:12 -0600
              Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 10:29 -0700
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 11:31 -0700
                Re: va_start without the first argument? scott@slp53.sl.home (Scott Lurndal) - 2017-03-13 18:40 +0000
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 12:31 -0700
            Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-11 19:53 +0100
              Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-11 19:05 +0000
                Re: va_start without the first argument? Keith Thompson <kst-u@mib.org> - 2017-03-11 11:56 -0800
              Re: va_start without the first argument? antispam@math.uni.wroc.pl - 2017-03-12 05:41 +0000
              Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-12 13:52 +0100
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-12 14:40 +0000
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-12 18:13 +0100
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-12 18:04 +0000
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-12 21:04 +0100
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-12 21:02 +0000
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-12 22:40 +0100
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-12 15:51 -0700
                Re: va_start without the first argument? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2017-03-12 16:52 -0700
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-13 00:56 +0100
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-13 09:17 -0700
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-13 17:54 +0000
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-13 22:12 +0100
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-13 22:48 +0000
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-14 13:46 +0100
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-14 13:37 +0000
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-14 15:24 +0100
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-14 08:25 -0700
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-14 17:02 +0100
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-14 09:45 -0700
                Re: va_start without the first argument? Keith Thompson <kst-u@mib.org> - 2017-03-14 09:15 -0700
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-14 10:02 -0700
                Re: va_start without the first argument? jt@toerring.de (Jens Thoms Toerring) - 2017-03-14 20:32 +0000
                Re: va_start without the first argument? raltbos@xs4all.nl (Richard Bos) - 2017-03-14 07:44 +0000
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-14 13:38 +0100
                Re: va_start without the first argument? Keith Thompson <kst-u@mib.org> - 2017-03-14 08:57 -0700
                Re: va_start without the first argument? Keith Thompson <kst-u@mib.org> - 2017-03-13 11:21 -0700
                Re: va_start without the first argument? scott@slp53.sl.home (Scott Lurndal) - 2017-03-13 18:33 +0000
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-13 22:08 +0100
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-13 15:23 -0700
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-14 13:58 +0100
                Re: va_start without the first argument? Keith Thompson <kst-u@mib.org> - 2017-03-14 09:18 -0700
                Re: va_start without the first argument? scott@slp53.sl.home (Scott Lurndal) - 2017-03-14 16:52 +0000
                Re: va_start without the first argument? Keith Thompson <kst-u@mib.org> - 2017-03-14 11:34 -0700
                Re: va_start without the first argument? scott@slp53.sl.home (Scott Lurndal) - 2017-03-14 18:54 +0000
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-14 13:30 -0700
                Re: va_start without the first argument? Ike Naar <ike@iceland.freeshell.org> - 2017-03-15 21:55 +0000
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-15 15:16 -0700
                Re: va_start without the first argument? Philip Lantz <prl@canterey.us> - 2017-03-23 21:04 -0700
                Re: va_start without the first argument? David Brown <david.brown@hesbynett.no> - 2017-03-14 21:48 +0100
                Re: va_start without the first argument? scott@slp53.sl.home (Scott Lurndal) - 2017-03-14 14:01 +0000
                Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-14 07:42 -0700
                Re: va_start without the first argument? scott@slp53.sl.home (Scott Lurndal) - 2017-03-14 12:38 +0000
                Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-13 01:11 +0100
                Re: va_start without the first argument? Ian Collins <ian-news@hotmail.com> - 2017-03-13 15:43 +1300
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-13 10:36 +0000
                Re: va_start without the first argument? Ian Collins <ian-news@hotmail.com> - 2017-03-14 07:33 +1300
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-13 19:00 +0000
                Re: va_start without the first argument? Ian Collins <ian-news@hotmail.com> - 2017-03-14 08:05 +1300
                Re: va_start without the first argument? BartC <bc@freeuk.com> - 2017-03-13 23:10 +0000
                Re: va_start without the first argument? Ian Collins <ian-news@hotmail.com> - 2017-03-14 17:38 +1300
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-14 05:48 -0700
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 12:12 -0700
                Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-12 19:39 +0100
  Re: va_start without the first argument? jt@toerring.de (Jens Thoms Toerring) - 2017-03-10 20:49 +0000
    Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-10 14:41 -0800
      Re: va_start without the first argument? John Bode <jfbode1029@gmail.com> - 2017-03-10 16:05 -0800
        Re: va_start without the first argument? jacob navia <jacob@jacob.remcomp.fr> - 2017-03-11 21:47 +0100
          Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-11 13:07 -0800
            Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-11 22:24 +0100
              Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 05:44 -0700
                Re: va_start without the first argument? Jerry Stuckle <jstucklex@attglobal.net> - 2017-03-13 08:59 -0400
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 06:17 -0700
                Re: va_start without the first argument? Jerry Stuckle <jstucklex@attglobal.net> - 2017-03-13 13:27 -0400
                Re: va_start without the first argument? Jerry Stuckle <jstucklex@attglobal.net> - 2017-03-13 13:30 -0400
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 11:00 -0700
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 10:34 -0700
          Re: va_start without the first argument? antispam@math.uni.wroc.pl - 2017-03-12 06:00 +0000
          Re: va_start without the first argument? gordonb.gas5o@burditt.org (Gordon Burditt) - 2017-03-17 09:46 -0500
            Re: va_start without the first argument? supercat@casperkitty.com - 2017-03-17 09:07 -0700
        Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 05:39 -0700
          Re: va_start without the first argument? John Bode <jfbode1029@gmail.com> - 2017-03-13 11:40 -0700
            Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 12:01 -0700
              Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-13 23:17 +0100
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 16:15 -0700
                Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-14 00:26 +0100
                Re: va_start without the first argument? kikiins@gmail.com - 2017-03-13 16:51 -0700
                Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-14 01:12 +0100
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 18:24 -0700
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-13 18:57 -0700
                Re: va_start without the first argument? raltbos@xs4all.nl (Richard Bos) - 2017-03-14 07:59 +0000
                Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-14 06:45 -0700
                Re: va_start without the first argument? Robert Wessel <robertwessel2@yahoo.com> - 2017-03-13 18:20 -0500
                Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-14 00:31 +0100
    Re: va_start without the first argument? raltbos@xs4all.nl (Richard Bos) - 2017-03-13 16:51 +0000
  Re: va_start without the first argument? jacobnavia <jacob@jacob.remcomp.fr> - 2017-03-11 19:29 +0100
  Re: va_start without the first argument? Siri Cruise <chine.bleu@yahoo.com> - 2017-03-11 12:12 -0800
  Re: va_start without the first argument? luser droog <luser.droog@gmail.com> - 2017-03-13 05:37 -0700
    Re: va_start without the first argument? luser droog <luser.droog@gmail.com> - 2017-03-15 11:45 -0700
      Re: va_start without the first argument? Thiago Adams <thiago.adams@gmail.com> - 2017-03-15 13:39 -0700

csiph-web