C/C++에서 공간 기억 부류(Storage Class)에 대해 설명하고, 이를 이해하기 위한 다양한 방식을 제공하겠습니다. 공간 기억 부류는 변수의 수명과 범위를 정의하며, 프로그램의 다양한 영역에서 변수와 함수의 동작 방식을 제어하는 데 사용됩니다.
공간 기억 부류는 변수와 함수의 저장 위치, 수명, 초기화 및 범위를 제어하는 키워드입니다. C/C++에서는 주요 네 가지 공간 기억 부류가 있습니다:
auto 키워드는 명시적으로 사용할 필요가 없습니다.#include <iostream>
void autoExample() {
int autoVar = 5; // 자동 변수
std::cout << "Auto Variable: " << autoVar << std::endl;
}
int main() {
autoExample();
return 0;
}
#include <iostream>
void staticExample() {
static int staticVar = 0; // 정적 변수
staticVar++;
std::cout << "Static Variable: " << staticVar << std::endl;
}
int main() {
staticExample();
staticExample();
staticExample();
return 0;
}
#include <iostream>
void registerExample() {
register int regVar = 10; // 레지스터 변수
std::cout << "Register Variable: " << regVar << std::endl;
}
int main() {
registerExample();
return 0;
}
extern 키워드를 사용하여 선언합니다.// file1.cpp
#include <iostream>
int globalVar = 10; // 전역 변수 정의
void externExample();
int main() {
externExample();
return 0;
}
// file2.cpp
#include <iostream>
extern int globalVar; // 외부 변수 선언
void externExample() {
std::cout << "Extern Variable: " << globalVar << std::endl;
}
변수의 공간 기억 부류는 변수의 메모리 할당 방식과 밀접한 관련이 있습니다.
메모리 레이아웃:
+------------------+
| 코드 세그먼트 |
| (Code Segment) |
+------------------+
| 데이터 세그먼트 |
| (Data Segment) |
| 전역 변수, 정적 변수 |
+------------------+
| 힙 세그먼트 |
| (Heap Segment) |
+------------------+
| 스택 세그먼트 |
| (Stack Segment) |
| 자동 변수 |
+------------------+
공간 기억 부류와 메모리 구조를 이해하기 쉽게 그림과 표로 표현하였습니다.
공간 기억 부류 예시:
자동 변수:
+------------------+
| 스택 세그먼트 |
| autoVar |
+------------------+
정적 변수:
+------------------+
| 데이터 세그먼트 |
| staticVar |
+------------------+
레지스터 변수:
+------------------+
| CPU 레지스터 |
| regVar |
+------------------+
외부 변수:
+------------------+
| 데이터 세그먼트 |
| globalVar |
+------------------+
다양한 공간 기억 부류를 사용하는 예제를 추가로 제공합니다.
// file1.cpp
#include <iostream>
static int fileStaticVar = 100; // 파일 범위 정적 변수
void printFileStaticVar() {
std::cout << "File Static Variable: " << fileStaticVar << std::endl;
}
int main() {
printFileStaticVar();
return 0;
}
// file1.cpp
#include <iostream>
int sharedVar = 50; // 전역 변수 정의
void printSharedVar();
int main() {
printSharedVar();
return 0;
}
// file2.cpp
#include <iostream>
extern int sharedVar; // 외부 변수 선언
void printSharedVar() {
std::cout << "Shared Variable: " << sharedVar << std::endl;
}
C/C++에서 공간 기억 부류는 변수와 함수의 저장 위치, 수명, 초기화 및 범위를 제어하는 키워드입니다. 주요 공간 기억 부류에는 자동 변수, 정적 변수, 레지스터 변수, 외부 변수가 있습니다. 자동 변수는 스택 세그먼트에 저장되고, 정적 변수와 외부 변수는 데이터 세그먼트에 저장됩니다. 레지스터 변수는 CPU 레지스터에 저장될 수 있습니다. 운영체제는 이러한 메모리 영역을 관리하여 프로그램이 효율적으로 실행될 수 있도록 돕습니다.
이와 같은 내용을 통해 C/C++의 공간 기억 부류에 대해 더 깊이 이해할 수 있을 것입니다. 추가로 궁금한 사항이 있으면 알려주세요!