в функцию, она передаётся по значению ( т.е происходит копирование ). Правильно ли я понимаю, что если вызывать рекурсивную функцию с 1 аргументом - структурой, передав её по значению, то на каждой итерации будет происходить копирование ?)
Если вы не будете брать указатели от параметра, то она не только будет копироваться, но и окажется на стеке
по поводу того что оказывается на стеке кажется "все не так однозначно" и это решает сам GO. Кажется повлиять на это практически невозможно... Я не прав?
повлиять возможно
да блин опять ссылку съело ))) Как? на голанг орг в разделе doc/faq#stack_or_heap "The storage location does have an effect on writing efficient programs. When possible, the Go compilers will allocate variables that are local to a function in that function's stack frame. However, if the compiler cannot prove that the variable is not referenced after the function returns, then the compiler must allocate the variable on the garbage-collected heap to avoid dangling pointer errors. Also, if a local variable is very large, it might make more sense to store it on the heap rather than the stack." Тоесть мы можем предположить, что так будет. Но явно влиять не можем
иногда компилятору можно помочь
var s int return func() { s++ } я не брал указателей, но s явно не на стеке
> return func() Ну да, ну да
Обсуждают сегодня