코루틴 프레임 할당
코루틴 프레임의 할당과 수명을 추론합니다.
코루틴 프레임 할당은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
상태는 어디에 저장되는가
코루틴의 지역 변수는 일시 중단 사이에도 유지됩니다. 일시 중단 사이에는 함수가 반환되므로 스택에 존재할 수 없습니다. 대신 힙에 할당된 코루틴 프레임에 저장됩니다.
프레임의 구성 요소
프레임에는 다음이 들어 있습니다.
- 코루틴의 매개변수
- 프로미스 객체
- 일시 중단 사이에 유지되는 지역 변수
- 재개 및 소멸 함수 포인터
힙 할당 비용
코루틴을 호출할 때마다 프레임이 할당됩니다. 할당에는 비용이 들므로 호출 빈도가 높은 코루틴에서는 중요합니다. 최적화 컴파일러는 수명이 제한된 경우 할당을 생략할 수 있습니다. 이를 HALO (Heap Allocation eLision Optimization)라고 합니다.
HALO가 적용되는 경우
다음과 같은 경우 컴파일러가 힙 할당을 피할 수 있습니다.
- 코루틴의 수명이 코드상 확실하게 제한되는 경우
- 인라이닝을 통해 프레임이 스택에 들어간다는 것을 증명할 수 있는 경우
- 컴파일 시점에 프레임 크기가 고정되는 경우
사용자 지정 할당자
프로미스 타입 내부에서 operator new를 오버로드하면 코루틴 프레임에 사용자 지정 할당자를 제공할 수 있습니다.
struct promise_type {
void* operator new(size_t size) {
return std::malloc(size);
}
void operator delete(void* ptr) {
std::free(ptr);
}
};프레임 풀
처리량이 높은 비동기 시스템에서는 일반 할당자의 오버헤드를 피하기 위해 풀에서 프레임을 할당하십시오. 각 스레드 또는 작업 타입이 자체 풀을 가질 수 있습니다.
프레임 크기
프레임 크기는 어떤 일시 중단 지점에서든 유지될 수 있는 변수 집합 중 가장 큰 집합에 따라 결정됩니다. 지역 변수를 더 추가하면 프레임 크기가 커집니다.
프레임 크기 줄이기
팁:
- 변수의 범위를 꼭 필요한 만큼만 제한하십시오.
- 큰 지역 배열은 피하고 힙을 명시적으로 사용하십시오.
- 임시 값을 별도의 비코루틴 도우미 함수로 옮기십시오.
프레임 검사
컴파일러는 프레임 크기를 출력할 수 있습니다. clang에서는 -fcoro-aligned-allocation을 사용한 뒤 진단 옵션을 통해 검사하십시오. 디스어셈블리에서는 프레임 배치를 확인할 수 있습니다.
수명과 정리
final_suspend가 완료되면 코루틴 프레임이 소멸합니다. 명시적으로 소멸시킨 경우에는 더 일찍 소멸할 수 있습니다. RAII 멤버는 올바르게 소멸됩니다.
메모리 안전성
코루틴 핸들은 원시 포인터입니다. 코루틴이 소멸된 뒤에도 핸들을 보유하면 정의되지 않은 동작이 발생합니다. 라이브러리 타입은 이를 방지하기 위해 핸들을 RAII로 감쌉니다.
걱정해야 하는 경우
대부분의 애플리케이션에서는 프레임 할당을 신경 쓸 필요가 없습니다. 코루틴이 수백만 개이거나 성능 제약이 극심한 경우에만 살펴보십시오. 먼저 프로파일링하십시오.
빠른 확인
코루틴 프레임은 왜 일반적으로 힙에 존재할까요?
복습
코루틴은 일시 중단 사이의 상태를 보존하기 위해 힙 프레임을 할당합니다. 가능한 경우 컴파일러가 할당을 생략할 수 있으며 이를 HALO라고 합니다. 사용자 지정 할당자와 프레임 풀은 처리량이 높은 시스템에 도움이 되지만, 대부분의 코드는 이를 걱정할 필요가 없습니다.
자주 묻는 질문
“코루틴 프레임 할당” 강의는 무료인가요?
네 — “코루틴 프레임 할당” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“코루틴 프레임 할당”에서 뭘 배우나요?
코루틴 프레임의 할당과 수명을 추론합니다. 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“코루틴 프레임 할당” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.