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 <mb.ros...@gmail.com> 
> 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 golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/3818a025-d46c-4e23-8b2e-6e0a08c0986an%40googlegroups.com.

Reply via email to