Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #7651 > unrolled thread
| Started by | "A" <a@a.a> |
|---|---|
| First post | 2011-07-08 19:07 +0200 |
| Last post | 2011-07-11 17:02 +0200 |
| Articles | 4 — 3 participants |
Back to article view | Back to comp.lang.c++
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
| From | "A" <a@a.a> |
|---|---|
| Date | 2011-07-08 19:07 +0200 |
| Subject | static 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]
| From | Ian Collins <ian-news@hotmail.com> |
|---|---|
| Date | 2011-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]
| From | Kai-Uwe Bux <jkherciueh@gmx.net> |
|---|---|
| Date | 2011-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]
| From | "A" <a@a.a> |
|---|---|
| Date | 2011-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