Статическое выделение и постоянная работа: как избежать use-after-free в пулах объектов
Static Allocation, Constant Work
Автор разбирает проблему use-after-free в пулах объектов и показывает, как статическое выделение памяти и принцип постоянной работы помогают её решить. Он объясняет, почему пулы с типизированным выделением безопаснее, и предлагает подход с резервными объектами, который упрощает логику и повышает предсказуемость. На примере TigerBeetle демонстрируется применение этих идей на практике.
Системы, работающие на пределе возможностей без строгих ограничений, терпят катастрофические сбои.
- mrkeen
mrkeen: > TigerStyle: Память должна выделяться статически при запуске. После инициализации никакая память не должна выделяться динамически (или освобождаться и перевыделяться). Это позволяет избежать непредсказуемого поведения, которое может существенно повлиять на производительность, и избежать use-after-free. Возможно, поддержание массива NULL-заказов удовлетворяет букве закона «никакого динамического выделения», но я не уверен, что это удовлетворяет духу. Разве вы не написали буфер NULL-заказов, который затем выдаёте вызывающим (т.е. «выделяете» и «перевыделяете»)? Чужой проверенный в боях аллокатор может быть медленным или содержать ошибки, поэтому вы пишете свой собственный как часть реализации бизнес-логики?
- markus0
markus0: Я хочу больше работать с системами, которые всегда следуют таким строгим ограничениям и руководствам по стилю/дизайну, но в то же время я чувствую, что реальность разработки ПО в масштабе — это команды, работающие в подсистемах, которые не учитывают целостную операционную модель программы. Поэтому даже при соблюдении лучших практик на локальном уровне система в целом оказывается фрагментированной и неэффективной, а строгие глобальные ограничения поэтому ощущаются как ограничивающие.
- pjmlp
pjmlp: Интересно, как все продолжают переоткрывать техники программирования для 8- и 16-битных домашних компьютеров спустя столько лет, в основном, как я полагаю, из-за скриптовых языков для всего в последние два десятилетия.