On Fri, 27 Apr 2012 11:12:07 -0400, Joseph Rushton Wakeling
<[email protected]> wrote:
Hello all,
A surprise today when tweaking some code.
I have a function which takes as input an array of values (the values
are a custom struct). So, in pseudocode, it's something like this:
struct MyStruct
{
size_t x;
size_t y;
double z;
}
void foo(MyStruct[] input)
{
...
}
Since the input isn't modified, I thought I'd tag it as const[1]:
void foo(const MyStruct[] input) { ... }
... but this turned out to noticeably slow down the program.
(Noticeably as in, a 25-second as opposed to 23-second running time,
consistently observed on repeated trials of different code versions.)
I'm surprised by this as I would have thought if anything tagging a
variable as const would if anything have increased the speed, or at
worst left it the same as before.
Can anyone explain why? It's no big deal, but I'm curious.
const should not affect code generation *at all*, except for name mangling
(const MyStruct is a different type from MyStruct), and generating an
extra TypeInfo for const MyStruct and const MyStruct[]. Const is purely a
compile-time concept.
This cannot account for an extra 2 seconds. Something else is happening.
Without more of your code, nobody can give a definitive answer except it
is not supposed to affect it.
-Steve