CPU와 메모리의 사용알기
스택Stack
힙 Heap
프로그램을 실행하면 운영체제는 메모리를 할당해준다.
메모리는 여러 구역으로 나뉜다.
코드
-작성한 프로그램 메모리에 올라가있다.
BSS
-0으로 초기화된 전역,정적변수가 저장된다.
DATA
-전역,정적변수가 저장된다.
스택
-Stack frame으로 순서대로 쌓인다.
-스택은 비교적 빠르다.
-스택은 빠르나 비교적 크기가 작다.
힙
-동적메모리가 할당되면 힙에 저장된다.
-메모리 어느부분에 쌓이는지 알 수 없다.
-할당된메모리가 반납안되면 계속 쌓여 메모리 누수가 생긴다.
스택 알아보기
아래 소스에서 실행되는 순서대로 스택에 쌓이게된다.
1.Stack frame main(),int a,b
2.Stack frame first(),int x,y
3.Stack frame second(),int x
#include <iostream>
//BSS 파트 처음에 생겼다가 마지막에 사라진다.
int g_i = 0;
//3.Stack frame second(),int x
int second(int x) {
return 2 * x;
}
//2.Stack frame first(),int x,y
int first(int x) {
int y = 3;
return second(x + y);
}
//1.Stack frame main(),int a,b
int main()
{
using namespace std;
int a = 1, b;
b = first(a);
cout << b << endl;
return 0;
}
힙 알아보기
#include <iostream>
void initArray() {
//메모리를 반납하지않으면 사용은 못하는데 메모리엔 할당되어있다.
int *ptr2 = new int[1000];
}
int main()
{
int *ptr = nullptr;
//힙메모리에 동적할당된 주소를 가져온다.
ptr = new int[1000000];
//힙메모리에 할당된 메모리를 반납한다.
delete[] ptr;
//메모리반납해도 주소는 가지고있다 초기화해준다.
ptr = nullptr;
//메모리 누수 예
initArray();
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 재귀적 함수호출 (0) | 2019.08.01 |
---|---|
c++ vector (size,capacity,reserve) vector를 stack처럼 사용하기 (0) | 2019.07.31 |
c++ 함수포인터 Function Pointers (0) | 2019.07.31 |
c++ 함수 오버로딩 (0) | 2019.07.31 |
c++ inline 함수 (0) | 2019.07.31 |