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

Всем привет, я тут читал, когда передавать указатель, а когда

копию и здесь есть вот такая фраза:
"Second is the consideration of efficiency. If the receiver is large, a big struct for instance, it will be much cheaper to use a pointer receiver."
Собственно, а как понять, когда структура достаточно большая, что ее не стоит передавать по значению?

13 ответов

14 просмотров

Почитай про размер стек фрейма, посчитай размер структуры своей -> вопрос отпадёт. А вообще, насколько я помню, никто тебе не гарантирует что компилятор не решит передавать копию или, наоборот, указатель там, где он посчитает, что это оправдано, входе всяких оптимизаций

Ну и вопрос в том должна ли функция мутировать переданный ей объект. Если нет, то по значению, если да, то указатель

Ilya-Starchenko Автор вопроса
lrrr_lrrr
Ну и вопрос в том должна ли функция мутировать пер...

Но если компилятор решит передать по указателю, то не будет гарантии иммутабельности.

Ilya Starchenko
Но если компилятор решит передать по указателю, то...

Если компилятор решил что-то сделать, то он решит это сделать в таком и только в таком случае, чтобы не внести неочевидного поведения

первый признак - структура имеет функции (хотя так говорить неправильно) в структуре больше 15 полей это второй признак

Ilya Starchenko
Но если компилятор решит передать по указателю, то...

Компилятор не может "решить" передать по указателю. Он в любом случае копирует данные на стек (или теперь в регистры).

Евгений Омельченко
15 булов это так-то 16 байт

Можно упаковать в 2 байта наверное

Ilya-Starchenko Автор вопроса
Александр Попов
первый признак - структура имеет функции (хотя так...

Ну, а если это методы структуры, которая содержит только слайсы и мапы, это же не лучшая идея делать лишнюю аллокацию, с учетом, что внутри одни указатели.

Практически всегда передавай структуры по указателю. Если нужно будет - потом оптимизируешь

где то и на эту тему есть статья. я обычно ориентируюсь так: если размер структуры больше чем размер указателя раза в полтора, то тогда использую как указатель

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
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...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта