I do agree escape analysis is hard and gc is clever enough to handle many 
cases.
But at this specified case, I think it is really unreasonable, unless 
someone could provide a reasonable explanation.

On Sunday, May 23, 2021 at 6:16:04 AM UTC-4 axel.wa...@googlemail.com wrote:

> I think you should be careful using terms like "not reasonable".
>
> If you don't believe the existing heuristic to be good, my recommendation 
> would be to collect some data on that, showing that for a useful corpus of 
> Go programs, the heuristics lead to more adverse effects (e.g. slower 
> programs) than an alternative you would suggest. But it's not productive to 
> just black-box poke at escape analysis using toy examples and derive broad 
> judgments about the existing heuristics from that.
>
> On Sun, May 23, 2021 at 11:57 AM tapi...@gmail.com <tapi...@gmail.com> 
> wrote:
>
>>
>>
>> On Sunday, May 23, 2021 at 5:42:41 AM UTC-4 tapi...@gmail.com wrote:
>>
>>> On Sunday, May 23, 2021 at 4:51:30 AM UTC-4 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])
>>>> }
>>>>
>>>
>>> Another question is, why should "make([]T, K)" escape to heap?
>>> Using the capacity as the criterion is not reasonable.
>>> After all arrays with even larger sizes will not allocated on heap.
>>>
>>
>> It looks, capacity is not only criterion. Whether or not there is a 
>> pointer referencing the allocated elements is another factor.
>> In the following program, if K is changed to "1<<12", then no escapes.
>>
>> But, this is still not reasonable.
>>
>> package main
>>
>> const K = 1<<13
>> var i = K-1
>>
>> func main() {
>>     var x = new([K]int) // new([8192]int) escapes to heap
>>     println(x[i])
>>     
>>     var y [K]int // not escape
>>     println(y[i])
>>     
>>     var z = [K]int{} // not escape
>>     println(z[i])
>>     
>>     var w = &[K]int{} // &[8192]int{} escapes to heap
>>     println(w[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/571020ba-89c4-4de6-8eba-17d46b20ce42n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/571020ba-89c4-4de6-8eba-17d46b20ce42n%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/b78084a6-518a-4444-ab04-f0fd4c095a9an%40googlegroups.com.

Reply via email to