Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Владимир Балун — Углубленная работа с памятью в Go

Ozon Tech
December 12, 2022

Владимир Балун — Углубленная работа с памятью в Go

Ozon Tech

December 12, 2022
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. • Аллокация объектов в Go • Взаимодействие с кучей •

    Устройство стека в Go • Собственные аллокаторы на Go
  2. 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. https://go.dev/doc/faq#stack_or_heap
  3. runtime/stack.go runtime/proc.go •Go 1.2: goroutine stack has been increased from

    4Kb to 8Kb. •Go 1.4: goroutine stack has decreased from 8Kb to 2Kb.
  4. 1. Выделяем память для нового стека 2. Выставляем _Gcopystack статус

    3. Копируем данные 4. Освобождаем память старого стека 5. Корректируем указатели
  5. • Pool is safe for use by multiple goroutines simultaneously.

    • Any item stored in the Pool may be removed automatically at any time without notification. If the Pool holds the only reference when this happens, the item might be deallocated.
  6. github.com/VladimirBalun/go-allocators-meetup • Эти знания не нужны, чтобы писать хорошие программы

    на Go • Эти знания бывают часто нужны в процессе оптимизации программы, а также в процессе выявления проблем с памятью