Первая лекция второй части моего англоязычного курса по С++ доступна на Youtube.
https://www.youtube.com/watch?v=Q3ytjLP5NyA
Эта лекция начинает глубокое погружение в аллокаторы C++. Мы начнём с глобального (C-style) выделения памяти и исторической мотивации появления пользовательских аллокаторов в раннем C++. Затем разберём две фундаментальные проблемы их дизайна -- взаимозаменяемость и переход между разными типами аллокаторов. Через серию практических примеров -- включая freelist allocator -- мы исследуем, что именно идет не так на практике, почему дизайн аллокаторов оказывается неожиданно тонким и сложным, и как разделяемое состояние и правила продвижения аллокаторов усложняют реализацию контейнеров. Далее мы рассмотрим идею отделения стратегии выделения памяти от самих контейнеров, закладывая основу arena-based подхода, и проанализируем проблемы управления локальными аллокаторами внутри контейнеров. Эти проблемы впоследствии мотивировали изменения стандарта, но это мы оставим на следующую лекцию.
Timeline:
00:00 Начало. Пара слов про глобальные (C-style) аллокаторы.
04:51 Мотивация аллокаторов в раннем C++
09:49 Две важные проблемы: Interchangability и Rebinding
14:43 Logging Allocator Case Study
19:25 Weasel Words and C++11 Allocators Motivation
28:10 Case Study: Freelist Allocator и его проблемы
40:04 Разбор и починка причин проблем: Shared Freelist
52:10 Separating Resource: основы Arena-Based подхода
55:00 Case Study: Small Vector
01:01:38 Allocator Instances Hell: Halpern's Case and Scoped Allocators
01:08:26 Проблемы классических аллокаторов, тизер на следующую лекцию и список литературы.
#cpp_postgraduate
Post #344
11.4K