It also escapes if `n` is a local variable.

>From the code, it looks, if the capacity of the maked slice is larger than 
1<<12, then the slice is allocated on heap.

Is there a possibility that, in the "make" implementation, different 
routines are chosen by different capacity arguments?

On Sunday, May 23, 2021 at 5:03:02 AM UTC-4 axel.wa...@googlemail.com wrote:

> Hi,
>
> there is no such thing as "possibly escaping". The compiler needs to 
> decide whether to emit the code to reserve stack space for a variable or 
> whether to emit the code to allocate heap-space. That's a binary choice, it 
> will always do one or the other.
>
> So, yes, `make([]T, n)` in this example always escapes. I assume the 
> heuristic marks it as escaping because `n` is a non-local variable, so it 
> doesn't prove that `n` is effectively constant. It might even just mark 
> every `make` with a `var` argument as escaping.
>
> On Sun, May 23, 2021 at 10:51 AM tapi...@gmail.com <tapi...@gmail.com> 
> wrote:
>
>> In the following code, "make([]T, n)" is reported as escaped.
>> But does it really always escape at run time?
>> Does the report just mean "make([]T, n) possibly escapes to heap"?
>>
>> package main
>>
>> type T int
>>
>> const K = 1<<13
>> const N = 1<<12
>> var n = N
>> var i = n-1
>>
>> func main() {
>>     var r = make([]T, N) // make([]T, N) does not escape
>>     println(r[i])
>>     
>>     var r2 = make([]T, n) // make([]T, n) escapes to heap
>>     println(r2[i])
>>     
>>     var r3 = make([]T, K) // make([]T, K) escapes to heap
>>     println(r3[i])
>> }
>>
>> -- 
>> 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...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/0ef15402-2e71-4522-bf67-26f766da55e5n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/0ef15402-2e71-4522-bf67-26f766da55e5n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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/a44f78ab-2c10-475d-aeeb-1eef8cb8e412n%40googlegroups.com.

Reply via email to