170 похожих чатов

Подскажите, пожалуйста c указателями: Как я понял, в golang, передавая структуру

в функцию, она передаётся по значению ( т.е происходит копирование ). Правильно ли я понимаю, что если вызывать рекурсивную функцию с 1 аргументом - структурой, передав её по значению, то на каждой итерации будет происходить копирование ?)

7 ответов

14 просмотров

Если вы не будете брать указатели от параметра, то она не только будет копироваться, но и окажется на стеке

Евгений Омельченко
Если вы не будете брать указатели от параметра, то...

по поводу того что оказывается на стеке кажется "все не так однозначно" и это решает сам GO. Кажется повлиять на это практически невозможно... Я не прав?

ddpvfpd
повлиять возможно

да блин опять ссылку съело ))) Как? на голанг орг в разделе 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 явно не на стеке

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта