Well, I used runtime runtime.MemStats StackInuse.
I don't have much knowledge about compiler optimization.
But to make it clear for myself:
considering these 2 functions:
//go:noinline
func A() {
var h int
for i := 0; i < 1e5; i++ {
h = i
_ = h
fmt.Printf("%+v\n", &h)
}
}
//go:noinline
func B() {
for i := 0; i < 1e5; i++ {
h := i
_ = h
fmt.Printf("%+v\n", &h)
}
}
The address of h in B is changing in each iteration although it's not
causing stack to grow.
If you point me to the documentation for this specific case, I would
appreciate it.
Regards,
On Tuesday, March 19, 2024 at 5:46:36 PM UTC+1 Ian Lance Taylor wrote:
> On Tue, Mar 19, 2024 at 9:36 AM Mohamad Rostami <[email protected]>
> wrote:
> >
> > I've seen in many places in go source code re-declaring a variable with
> the same name.
> > e.g:
> > for i < j {
> > h := ...
> > }
> > Instead of
> > var h int
> > for i < j {
> > h = ...
> > }
> >
> > So I did a benchmark to check the differences. I didn't find any
> performance related differences, but in terms of Stack Memory in use, the
> second approach is better than the first one.
> >
> > Not sure if the way is in standard library is by intention or something
> that should be ignored.
>
> The two versions are basically equivalent. How are you measuring
> stack memory usage? If they are different, there may be something to
> fix in the compiler.
>
> Ian
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/3818a025-d46c-4e23-8b2e-6e0a08c0986an%40googlegroups.com.