CPU는 두뇌 메모리는 공책
프로그램 실행 중에 여러 데이터가 공유하는 메모리는 스택, 힙 두 종류
데이터섹션, 코드섹션은 특정 코드 및 데이터 용도로 고정되어있다.
CPU안에 있는 저장 가능한 공간 (휘발성)
CPU가 사용하는 저장 공간중에 가장 빠른 저장공간
CPU가 연산을 할때 레지스터에 가져와서 처리한다.
레지스터가 필요한 이유
어셈블리어에서 볼 수 있는 레지스터
ebp
, esp
, eax
, ecx
등 모두 레지스터프로그램(쓰레드)마다 특정용도에 사용하라고 별도로 떼어놔 준 것이 스택 메모리
각 함수에서 사용하는 변수 등을 임시적으로 저장하는 메모리 공간이다.
기본 자료형 변수 (float, char, int, float 등은 모두 스택메모리에 할당)
기본 자료형 매개변수 전달시 스택메모리에 복사본을 만든다 (값형)
배열을 매개변수로 전달하면 배열의 시작 주소값이 스택메모리에저장된다.
배열 요소의 개수를 알 수 없어 스택메모리의 크기를 컴파일시에 결정할 수 없기 때문에!
따라서 매개변수로 전달된 배열의 값을 변경하면 원본이 변경된다.
void process(int nums[5]){
size_t i ;
for (i = 0 ; i < 5; i ++){
nums[i] *= 2; /* 원본 배열의 값이 바뀐다! */
}
}
각 함수에서 사용하는 스택 메모리 크기는 프로그램 컴파일 시에 결정된다. (정적메모리)
스택 메모리의 위치는 실행시에 결정된다. (스택은 큰 주소에서 작은 주소로 쌓인다. 순서대로)
Stackoverflow
스택메모리 내부
장점
할당/해제가 자동으로 관리 된다.
속도가 빠르다
단점
static
을 사용해야만 데이터 유지가능)가장 범용적인 형태의 메모리 (어디에 누구라도 사용할 수 있는 메모리)
CPU 및 컴파일러가 자동적으로 메모리관리를 안해준다.
프로그래머가 원할 때 원하는 만큼 할당받아서 사용하고 해제할 수 있다.
동적 메모리 : 메모리 할당/해제가 실행 중에 결정된다.
장점
단점
메모리 누수의 가능성이 있다. (메모리 할당 후 해제를 안했을 때)
메모리 할당 해제속도가 느리다