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


Groups > comp.lang.c++ > #7651 > unrolled thread

static struct and char arrays

Started by"A" <a@a.a>
First post2011-07-08 19:07 +0200
Last post2011-07-11 17:02 +0200
Articles 4 — 3 participants

Back to article view | Back to comp.lang.c++


Contents

  static struct and char arrays "A" <a@a.a> - 2011-07-08 19:07 +0200
    Re: static struct and char arrays Ian Collins <ian-news@hotmail.com> - 2011-07-09 08:05 +1200
    Re: static struct and char arrays Kai-Uwe Bux <jkherciueh@gmx.net> - 2011-07-09 00:53 +0200
      Re: static struct and char arrays "A" <a@a.a> - 2011-07-11 17:02 +0200

#7651 — static struct and char arrays

From"A" <a@a.a>
Date2011-07-08 19:07 +0200
Subjectstatic struct and char arrays
Message-ID<iv7dis$g2q$1@gregory.bnet.hr>
Hi,

I want to use the advantage of having single allocation of a certain struct 
or array but keep it "local".
For example - not to pollute my namespace I like to use a lot of "local" 
functions like this:

void Function1()
{
struct TLocalFunction1
    {
    void operator()(int i)
        {
        char abc[] = {1,2,3,4,5};
        }
    } LocalFunction1

// call "local" function
LocalFunction(1);
LocalFunction(2);
// etc...
}

Now the problem is that I think this might be slowing down Function1 because 
TLocalFunction1 and char abc are constantly initializing from scratch.

So, might I speed up if I prefix "struct TLocalFunction1" and "char abc" 
with the keyword "static" would that speed up the Function1 in terms of no 
more multiple allocations of TLocalFunction1 and char abc. Or is that 
compiler-dependent? 

[toc] | [next] | [standalone]


#7658

FromIan Collins <ian-news@hotmail.com>
Date2011-07-09 08:05 +1200
Message-ID<97p6a2F6tbU7@mid.individual.net>
In reply to#7651
On 07/ 9/11 05:07 AM, A wrote:
> Hi,
>
> I want to use the advantage of having single allocation of a certain struct
> or array but keep it "local".
> For example - not to pollute my namespace I like to use a lot of "local"
> functions like this:
>
> void Function1()
> {
> struct TLocalFunction1
>      {
>      void operator()(int i)
>          {
>          char abc[] = {1,2,3,4,5};
>          }
>      } LocalFunction1
>
> // call "local" function
> LocalFunction(1);
> LocalFunction(2);
> // etc...
> }
>
> Now the problem is that I think this might be slowing down Function1 because
> TLocalFunction1 and char abc are constantly initializing from scratch.
>
> So, might I speed up if I prefix "struct TLocalFunction1" and "char abc"
> with the keyword "static" would that speed up the Function1 in terms of no
> more multiple allocations of TLocalFunction1 and char abc. Or is that
> compiler-dependent?

Probably. In this case there's nothing to initialise in the struct its 
self, but the char array may as well be declared static.

-- 
Ian Collins

[toc] | [prev] | [next] | [standalone]


#7662

FromKai-Uwe Bux <jkherciueh@gmx.net>
Date2011-07-09 00:53 +0200
Message-ID<iv81ot$pgo$1@hoshi.visyn.net>
In reply to#7651
A wrote:

> Hi,
> 
> I want to use the advantage of having single allocation of a certain
> struct or array but keep it "local".
> For example - not to pollute my namespace I like to use a lot of "local"
> functions like this:
> 
> void Function1()
> {
> struct TLocalFunction1
>     {
>     void operator()(int i)
>         {
>         char abc[] = {1,2,3,4,5};
>         }
>     } LocalFunction1
> 
> // call "local" function
> LocalFunction(1);
> LocalFunction(2);
> // etc...
> }
> 
> Now the problem is that I think this might be slowing down Function1
> because TLocalFunction1 and char abc are constantly initializing from
> scratch.
> 
> So, might I speed up if I prefix "struct TLocalFunction1" and "char abc"
> with the keyword "static" would that speed up the Function1 in terms of no
> more multiple allocations of TLocalFunction1 and char abc. Or is that
> compiler-dependent?

Some cases:

a) If the array does not need initialization, the compiler can very likely 
see that and optimize the initialization away.

b) If the array is non-const, needs initialization, and the contents changes 
during the evaluation of LocalFunction, it has to be reinitialized anyway. 
Otherwise the second call to LocalFunction() would have the garbage contents 
from the previous run.

c) If the array is const, declare it as such and let the compiler take care 
of the possible optimizations.


Best,

Kai-Uwe Bux

[toc] | [prev] | [next] | [standalone]


#7728

From"A" <a@a.a>
Date2011-07-11 17:02 +0200
Message-ID<ivf3bm$7au$1@gregory.bnet.hr>
In reply to#7662
i didn't though of const.... but i think you may be right it might be used 
probably for some optimizations by the compiler.
maybe also declaring "static const struct" or just "const struct" as well 
then? 

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.c++


csiph-web