2011-12-16 1 views
2

Используется ли язык Go Копирование на запись для строк, как в Java? То есть если я передам строку по значению методу и никогда не изменю, это распределит память и скопирует строку (которая будет неэффективной по времени), или просто будет ссылаться на одну копию.Используется ли для использования на языках Copy-on-write для строк

+1

«копирование на запись ... как на Java» не имеет смысла. Объекты не являются значениями в Java; только ссылки. И передача справки NEVER делает копию объекта, на который он указывает, при любых обстоятельствах. Передача или назначение ссылки всегда будет относиться к тому же объекту, что и исходная ссылка. Объект никогда не копируется (а не «on-write»), если вы явно не скопируете его каким-либо методом и не получите ссылку на новый объект. – newacct

ответ

16

Это не Copy-on-Write, поскольку строки неизменяемы. Но совместное использование строки также не сделает копию базового региона памяти. В Go строка представляется в виде пары (длина, данные). Если вы передадите строку вокруг, Go будет копировать длину и указатель, но не данные, на которые указывает.

Дополнительную информацию см. this recent thread on golang-nuts.

2

Тип Go string практически эквивалентен java.lang.String. Эти две реализации (в среде выполнения Go, в JVM) также схожи, хотя они не идентичны. С точки зрения передачи аргументов функциям и методам производительность строк Go похожа на строки Java.

 Смежные вопросы

  • Нет связанных вопросов^_^