1. 배경 : 값 복사 비용에 대한 오해
오랫동안 C/C++ 개발 환경에서 “복사는 느리고 참조는 빠르다”는 규칙은 당연한 상식이었습니다. 이는 과거의 저성능 컴파일러와 하드웨어 제약 속에서는 유효한 지침이었으나, 현대 CPU 아키텍처와 SIMD 연산, 고도화된 최적화 컴파일러 환경에서는 이 규칙을 재검토할 필요가 있습니다.
2. 하드웨어 관점 : 레지스터와 역참조
Rectangle, Vector4, Color 등 16바이트 내외의 작은 구조체는 현대 CPU에게 이른바 "한 입 거리" 입니다.
값 전달 시
CPU는 데이터를 즉시 레지스터에 적재하여 연산에 투입합니다. 메모리 복사 비용보다 레지스터 직접 연산의 이득이 더 큽니다.
참조 전달 시
주소(8바이트)를 전달한 뒤, CPU가 메모리(RAM)를 다시 조회하는 역참조 과정이 발생합니다. 작은 데이터에서는 16바이트 복사보다 이 주소 기반 조회 비용이 더 비쌀 수 있습니다.
3. 설계와 최적화의 이점
작은 데이터를 값으로 다루면 다음과 같은 실무적 이점이 있습니다.
Aliasing 감소
컴파일러가 데이터 오염 가능성을 배제하고 공격적인 최적화를 수행할 수 있습니다.
안전성
지역 변수의 수명 문제(Dangling Reference)에서 자유롭고, 스레드 간 데이터 공유 시 경합 위험이 낮습니다.
직관성
데이터의 흐름이 명확하며 코드 가독성이 향상됩니다.
4. 데이터 크기에 따른 선택 기준
값 전달 권장 (Value)
• 약 64바이트 이하의 단순 구조체
• Unreal Engine 의 FVector, Unity 의 Vector3 와 같은 수학 타입
• Rectangle, Color 같은 기하학 타입
참조 전달 권장 (const &)
• std::vector, std::string 등 동적 메모리 관리 객체
• 수백 바이트 이상의 대형 구조체
• 객체의 상태를 공유하거나 직접 수정해야 하는 경우
5. 결론
“참조는 빠르고 값은 느리다” 는 규칙은 더 이상 절대적이지 않습니다.
작은 구조체는 값으로, 대형 컨테이너나 복사 비용이 큰 객체는 참조로 다루는 것이 현대 하드웨어와 타협하는 가장 효율적인 선택 기준입니다.
'C++' 카테고리의 다른 글
| 참조 반환(Return by Reference)의 이해와 활용 (0) | 2026.01.27 |
|---|---|
| 베스트 프랙티스(Best Practice) : 전문적인 C++ 코드의 기준 (0) | 2026.01.10 |
| 객체 초기화 방법 (0) | 2026.01.09 |
| new 할당과 초기화 (0) | 2026.01.09 |
| 스택(Stack)과 힙(Heap) : 책임과 수명의 차이 (0) | 2026.01.08 |