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.