On Mon, Jul 11, 2016 at 4:40 PM, Erich Rickheit KSC <rickh...@numachi.com> wrote: > Ian Lance Taylor wrote: >> On Sat, Jul 9, 2016 at 4:38 PM, Erich Rickheit KSC <rickh...@numachi.com> >> wrote: >> > I found myself writing code like this: >> > >> > s := make([]byte, len) >> > for i := 0; i < len; i++ { >> > // fill in s with stringy goodness >> > } >> > return string(s) >> > >> > Does this reuse the memory in s for the string, or does it allocate new >> > memory and copy? Or does escape analysis swoop in and make that decision? >> >> This will normally allocate new memory for the string and copy over >> the bytes. I believe that the compiler could optimize this case, but >> as far as I know no Go compiler currently implements that >> optimization. >> >> Ian > > So, the lesson is, try to use []byte or []rune when I need manipulate text. > > In those cases where I do need to build actual string objects, are there > ways to get the compiler to not do extra copies? For example, if I write > > str1 := "foo" + str2 + "bar" + secretStringConstant > > Does it know to build one string, or does it build the intermediates?
The gc compiler will build a single string. > How about: > > str1 := "foo" > str1 += str2 > str1 += "bar" > str1 += secretStringConstant I'm not sure. This might change with SSA. 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. For more options, visit https://groups.google.com/d/optout.