Garbage collector и управление памятью в Go

23
Go:memory Ростислав Дзінько

description

Доклад от Ростислава Дзинько про выделение и освобождение памяти в стеке и "куче". Работа с памятью при взаимодействии с кодом, написанном на C.

Transcript of Garbage collector и управление памятью в Go

Page 1: Garbage collector и управление памятью в Go

Go:memoryРостислав Дзінько

Page 2: Garbage collector и управление памятью в Go

About me● Software Architect @ ZeoAlliance● Interests: Python / C / C++ / Go / D● Made Video Course

Page 3: Garbage collector и управление памятью в Go

MemoryDiffers

Page 4: Garbage collector и управление памятью в Go

Heap & Frame & Stack

Heap = GC Function Frame

Goroutine Stack

Go memory

Page 5: Garbage collector и управление памятью в Go

Everything is passed by valuePointers & Values

Page 6: Garbage collector и управление памятью в Go

Pointer & Value

Value

Pointer

Page 7: Garbage collector и управление памятью в Go

Passing Slices are tricky

Values

intfloatboolstruct...

Pointers

*int*float*bool*struct...

Values

Slices

Page 8: Garbage collector и управление памятью в Go

Capacity: unappreciated Slices still tricky

Page 9: Garbage collector и управление памятью в Go

Structs are aligned Фікус-Пікус

Page 10: Garbage collector и управление памятью в Go

Where to allocate?

Heap vs Stack

Page 11: Garbage collector и управление памятью в Go

-mgo tool 6g -m src/gomemory/main.go

Page 12: Garbage collector и управление памятью в Go

Inlining = faster

Page 13: Garbage collector и управление памятью в Go

Inlining: Switch vs If

Page 14: Garbage collector и управление памятью в Go

Local Frame Stack

Page 15: Garbage collector и управление памятью в Go

Escape to Heap

Page 16: Garbage collector и управление памятью в Go

Move to Heap

Page 17: Garbage collector и управление памятью в Go

WTF?

Goroutine Stack

Page 18: Garbage collector и управление памятью в Go

Contiguous vs Fragment

Go 1.2 Go 1.3

Evolution

Page 19: Garbage collector и управление памятью в Go

Stack Growth

Stack Growth=

Reallocate+

Copy

but

Lock-Free!

AVOID

Page 20: Garbage collector и управление памятью в Go

Getting Statistics runtime.MemStats

Heap

Stack

General

Page 21: Garbage collector и управление памятью в Go

Go:new vs C:malloc

A bit of C

Page 22: Garbage collector и управление памятью в Go

C:malloc vs Go:new

Page 23: Garbage collector и управление памятью в Go

Questions?

Thank You for Attention