* 제가 보기 편하기 위해 작성하는 메모이므로, 누락된 내용이 있을 수 있습니다.
누락된 내용은 제가 이미 숙지하였기 때문이거나 다른 이유로 누락될 수 있습니다.
* 자동 공간, 정적 공간, 동적 공간
- C++은 데이터 저장을 대입 방법에 따라 자동 공간, 정적 공간, 동적 공간으로 구분합니다.
- 각각 실제 메모리 구조에서 스택, 데이터, 힙에 저장됩니다.
1. 자동 공간
- 함수 안에서 정의 되는 보통의 변수들을 자동 변수라고 합니다.
- 자동 변수들은 블록 안에서만 유효합니다.
int main()
{
int A = 6;
{
int B = 7;
}
//B 소멸
printf("%d", B); // -> 불가능
return 0;
}//A 소멸
- {}로 묶인 공간을 블록이라고 합니다.
- 자동 공간은 스택 공간에 저장됩니다.
2. 정적 공간
int A = 5;
int func()
{
static B = 0; //정적 변수라 블록이 끝나도 해제되지 않음
B++;
A = 0; //전역 변수라 가능
}
int main()
{
for(int i = 0; i < 5; i++)
func();
return 0;
}
- 정적 공간은 프로그램 실행 도중 계속 존재하는 공간입니다.
- 전역 변수는 함수 외부에 변수를 선언하거나 (전역 변수) static 키워드를 붙여서 만들 수 있습니다.
3. 동적 공간
#include <iostream>
#include <stdlib.h>
int main()
{
int *A = new int(5); //동적 할당
int *B = (int *)malloc(sizeof(int));
*B = 6;
printf("%d %d", *A, *B);
delete A;
free(B);
return 0;
}
- 동적 공간은 러닝 타임에 개발자가 할당해서 사용할 수 있는 공간입니다.
- 동적 공간은 힙 영역에 저장됩니다.
- new와 delete, malloc과 free를 통해 동적 할당과 해제가 가능합니다.
- 동적 공간을 사용한 후엔 반드시 해제하여 메모리 누수를 없애도록 합니다.
'공부 및 정리 > C++' 카테고리의 다른 글
C++의 기초 - 6 (0) | 2022.12.12 |
---|---|
C++의 기초 - 5 (0) | 2022.12.12 |
C++의 기초 - 4 (0) | 2022.11.30 |
C++의 기초 - 2 (0) | 2022.06.15 |
C++의 기초 - 1 (0) | 2022.06.12 |