피드로 돌아가기
Dev.toBackend
원문 읽기
Stack vs Heap: Lifetime 기반 메모리 할당 및 Dangling Pointer 분석
Stack vs Heap: Be Sure You Know Where Your Variables Live
AI 요약
Context
함수 내 지역 변수의 수명(Lifetime)과 메모리 할당 영역에 대한 이해 부족으로 인한 Undefined Behavior 발생. Stack 영역의 특성상 함수 종료 시 Frame이 제거되어 반환된 포인터가 유효하지 않은 메모리를 가리키는 문제 분석.
Technical Solution
- Stack Allocation을 CPU 레지스터(rsp) 이동 기반의 단일 인스트럭션으로 처리하는 초고속 할당 구조 설계
- Heap Allocation을 Allocator의 Bookkeeping 기반 빈 공간 탐색 및 관리 방식으로 구현하여 데이터 영속성 확보
- Variable Lifetime이 단일 함수 호출 범위로 제한될 경우 Stack 할당을 통한 오버헤드 최소화 전략 채택
- 함수 종료 후에도 데이터 유지가 필요한 경우 Heap 영역에 할당하여 Scope 외부에서도 접근 가능한 Durable Storage 확보
- Lifetime Rule 위반 시 발생하는 Dangling Pointer 및 Use-after-return 현상을 방지하기 위한 메모리 관리 체계 구축
- C 언어의 신뢰 기반 모델과 Rust의 컴파일 타임 Lifetime 검증 모델의 강제성 차이 분석
실천 포인트
- return &local과 같이 지역 변수의 주소를 반환하는 코드의 존재 여부 검토 - 데이터의 수명이 함수 프레임을 초과하는지 판단하여 Stack/Heap 할당 영역 결정 - Use-after-free 및 Use-after-return 방지를 위한 포인터 유효성 검증 로직 확인 - 고성능이 필요한 단기 데이터의 경우 Stack 할당을 최우선으로 고려