копию и здесь есть вот такая фраза:
"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."
Собственно, а как понять, когда структура достаточно большая, что ее не стоит передавать по значению?
Почитай про размер стек фрейма, посчитай размер структуры своей -> вопрос отпадёт. А вообще, насколько я помню, никто тебе не гарантирует что компилятор не решит передавать копию или, наоборот, указатель там, где он посчитает, что это оправдано, входе всяких оптимизаций
Ну и вопрос в том должна ли функция мутировать переданный ей объект. Если нет, то по значению, если да, то указатель
Но если компилятор решит передать по указателю, то не будет гарантии иммутабельности.
Если компилятор решил что-то сделать, то он решит это сделать в таком и только в таком случае, чтобы не внести неочевидного поведения
первый признак - структура имеет функции (хотя так говорить неправильно) в структуре больше 15 полей это второй признак
Компилятор не может "решить" передать по указателю. Он в любом случае копирует данные на стек (или теперь в регистры).
15 булов подряд с вами поспорят 😁
15 булов это так-то 16 байт
Можно упаковать в 2 байта наверное
Ну, а если это методы структуры, которая содержит только слайсы и мапы, это же не лучшая идея делать лишнюю аллокацию, с учетом, что внутри одни указатели.
Практически всегда передавай структуры по указателю. Если нужно будет - потом оптимизируешь
где то и на эту тему есть статья. я обычно ориентируюсь так: если размер структуры больше чем размер указателя раза в полтора, то тогда использую как указатель
Я бы исходил из размера кешлайна
Обсуждают сегодня