Size: a a a

2020 June 08

DP

Daniel Podolsky in Go-go!
pragus
вы всегда храните данные в байтах?
а?!
источник

VL

V L in Go-go!
Мои структуры в go обычно десятки байт, да. И я лучше не буду напрягать gc, если это возможно.
источник

VL

V L in Go-go!
Только вот мы опять скатились в какие-то оптимизации, вместо борьбы за читаемость и поддерживаемость кода 🙁
источник

p

pragus in Go-go!
V L
CPU, чем ближе данные в памяти - тем лучше для кеша. В случае, когда все на стеке - оно вот все, рядом.
размер кеш-линии - 64 байта в большинстве случаев.
источник

p

pragus in Go-go!
в Foo struct { Name, Surname, Email string } будет уже 3 косвенных доступа к памяти
источник

p

pragus in Go-go!
я о том, что надо отказаться от существенного количества встроенных типов чтобы вся эта история с горячим кешем имела смысл
источник

VL

V L in Go-go!
pragus
в Foo struct { Name, Surname, Email string } будет уже 3 косвенных доступа к памяти
В вашем случае (указатель) - будет уже шесть 🙂 И это мы говорим про чтение. А если начнем про модификацию?
(Хватит про оптимизации пожалуйста)
источник

p

pragus in Go-go!
V L
В вашем случае (указатель) - будет уже шесть 🙂 И это мы говорим про чтение. А если начнем про модификацию?
(Хватит про оптимизации пожалуйста)
4, а не 6
источник

VL

V L in Go-go!
pragus
4, а не 6
Могло поменяться в другом потоке и вот это все.
источник

p

pragus in Go-go!
V L
В вашем случае (указатель) - будет уже шесть 🙂 И это мы говорим про чтение. А если начнем про модификацию?
(Хватит про оптимизации пожалуйста)
вы же сами начали про оптимизацию.
источник

VL

V L in Go-go!
Я очень давно хочу закончить. Мой поинт прост: указатели там, где планируется менять данные, лежащие по этому указателю. Не планируется - указатель не нужен.
источник

p

pragus in Go-go!
V L
Могло поменяться в другом потоке и вот это все.
не имеет значения.
источник

p

pragus in Go-go!
V L
Я очень давно хочу закончить. Мой поинт прост: указатели там, где планируется менять данные, лежащие по этому указателю. Не планируется - указатель не нужен.
type Cache struct {
sync.Mutex
}

а потом cache.Lock()
источник

VL

V L in Go-go!
pragus
type Cache struct {
sync.Mutex
}

а потом cache.Lock()
Да, тут вы будете менять данные, т.к. методы над мютексом определены по указателю.
источник

p

pragus in Go-go!
V L
Да, тут вы будете менять данные, т.к. методы над мютексом определены по указателю.
Get? ;)
источник

p

pragus in Go-go!
имхо, в большинстве случаев вам понадобится поинтер, даже если в начале казалось что это не так.
источник

VL

V L in Go-go!
Мой опыт показывает как раз наоборот.
источник

DP

Daniel Podolsky in Go-go!
pragus
имхо, в большинстве случаев вам понадобится поинтер, даже если в начале казалось что это не так.
обычно не надобится
источник

p

pragus in Go-go!
Daniel Podolsky
обычно не надобится
type UserDetails struct { Age int, BirthDate time.Time, Email string }
type UserProfile { Name, Surname string, Details *UserDetails }
источник

DP

Daniel Podolsky in Go-go!
pragus
type UserDetails struct { Age int, BirthDate time.Time, Email string }
type UserProfile { Name, Surname string, Details *UserDetails }
и тем не менее
источник