정적 할당과 상수 작업: 메모리 안전성의 새로운 접근
Static Allocation, Constant Work
이 글은 메모리 안전성의 어려운 문제에 대한 후속으로, 객체 풀과 use-after-free 버그를 논의합니다. 저자는 타입 분리 풀을 사용한 할당기가 타입 혼동을 줄일 수 있다고 제안하며, TigerBeetle의 정적 할당과 상수 작업 원칙을 소개합니다. 정적 할당은 시작 시 최대 개수를 지정하고 초과 요청을 거부하여 과부하를 방지하고, 상수 작업은 항상 고정된 수의 객체를 유지하여 예측 가능한 성능을 보장합니다. 이러한 패턴은 특히 주문 매칭 엔진과 같은 시스템에서 유용합니다.
정적 할당은 마음의 평화를 줍니다. 시스템은 메모리가 충분하지 않으면 시작에 실패할 수 있지만, 시작했다면 과부하를 우아하게 처리할 것이라고 안심할 수 있습니다.
HN 토론
17- mrkeen
> TigerStyle: 모든 메모리는 시작 시 정적으로 할당되어야 합니다. 초기화 후에는 어떤 메모리도 동적으로 할당(또는 해제 및 재할당)될 수 없습니다. 이는 성능에 큰 영향을 줄 수 있는 예측 불가능한 동작을 피하고, use-after-free를 방지합니다.
NULL 주문 배열을 유지하는 것이 "동적 할당 금지" 법의 문자를 충족할지 모르지만, 그 정신을 충족한다고는 확신하지 않습니다.
당신은 단지 NULL 주문 버퍼를 작성하고, 그것을 호출자에게 빌려주는(즉, "할당" 및 "재할당") 것 아닌가요?
다른 사람의 검증된 할당자가 느리거나 버그가 있을 수 있으니, 비즈니스 로직 구현의 일부로 직접 작성하는 것인가요?
- markus0
나는 항상 그러한 엄격한 제약과 스타일/설계 지침을 따르는 시스템에서 더 일하고 싶지만, 동시에 대규모 소프트웨어 구축의 현실은 팀이 프로그램의 전체적인 운영 모델을 고려하지 않는 하위 시스템에서 작업하게 되는 것이라고 느낍니다. 따라서 지역적으로 모범 사례를 따르더라도 시스템 전체는 분열되고 비효율적이 되며, 엄격한 전역 제약은 제한적으로 느껴집니다.
- pjmlp
모두가 수년이 지난 후에도 8비트 및 16비트 홈 컴퓨터 프로그래밍 기술을 재발견하고 있는 것이 흥미롭습니다. 아마도 지난 20년 동안 모든 것을 스크립트 언어로 처리한 것이 원인일 것입니다.