Opened issue here: https://github.com/golang/go/issues/17530

/npat

On Thursday, October 20, 2016 at 5:22:27 PM UTC+3, T L wrote:
>
> yes, you are right. You can file an issue at 
> https://github.com/golang/go/issues
>
> On Thursday, October 20, 2016 at 9:11:14 PM UTC+8, Nick Patavalis wrote:
>>
>> Hi,
>>
>> It seems that the built-in append does not check for a situation like
>> the following, and needlessly copies data, when it could avoid it.
>>
>>   func appendBytes(a, b []byte) []byte {
>>           if len(b) == 0 {
>>                   return a
>>           }
>>        // Shouldn't append() check for something like this?
>>           if cap(a) >= len(a)+len(b) && &a[:len(a)+1][len(a)] == &b[0] {
>>                   return a[:len(a)+len(b)]
>>           }
>>           return append(a, b...)
>>   }
>>
>> If I'm following the breadcrumbs correctly, they lead to the fact that
>> runtime-memmove() does *not* short-circuit when source and destination
>> addresses are the same (I may be wrong, though).
>>
>> Running the benchmark at:
>>
>>   https://gist.github.com/npat-efault/f055654633f43d0ef771d38657fd499e
>>
>> for any value of N, demonstrates this.
>>
>> Rather marginal (and possibly very contrived) case, but I though I'd
>> point it out...
>>
>> /npat
>>
>>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to