스택은 자료구조의 한 종류
자료구조란 프로그램에서 사용할 데이터를 효율적으로 관리하기 위한 이론
스택에 데이터를 추가하면 push
제거하면 pop 이라고 한다.
어셈블리어 인가봅니다.
지역 변수 관련
push 자료구조 이론- 스택 포인터 주소 증가,
실제 컴퓨터- 스택 포인터 주소 감소 로 받아들인다.
pop 자료구조 이론- 스택 포인터 주소 감소,
실제 컴퓨터- 스택 포인터 주소 증가 로 받아들인다.
void Test()
{
int a,b,c;
}
Test함수가 시작되는 시점에 a,b,c 변수를 저장할 메모리 공간을 스택 영역에 확보해야 하므로
컴파일러는 변수를 위한 메모리 공간을 확보하기 위해
ax레지스터를 세 번 push하는 코드를 기계어로 만듭니다.
int a,b,c -------> push ax
push ax
push ax
12바이트 공간 생성
Test함수가 종료되는 시점에 pop명령을 세 번 호출하여 스택에 할당된 공간을 제거
지역 변수가 많을수록 push코드와 pop코드가 많아져 프로그램 효율이 떨어져
컴파일러는 이 방법을 사용하지 않는다.
sub,add명령을 사용하여 push와 pop을 대신한다.
sub SP, 12 //12만큼 줄여 공간 확보
add SP, 12 //12만큼 증가시켜 공간 확보
#include <stdio.h>
void show()
{
int n, i, j;
printf("Show Function\n");
}
void Test()
{
int y;
show();
}
int main(void)
{
int a, b, c;
Test();
}
j |
i |
n |
y |
c |
b |
a |
이런식으로 되어있다.
스택 프레임
함수를 호출할 떄 일어나는 스택의 변화를 스택 프레임 이라고 합니다.
지역 변수를 추가하거나 배열 크기를 변경하려면 스택 프레임이
수정되어야 하기 때문에 c언어 코드를 다시 컴파일 해야합니다.
배열을 선언할떄[]안에 반드시 상수를 적어야 하는 이유도 []안에 변수가 오면
정적으로 할당할 크기를 고정할 수 없어서 스택 프레임을 구성할 수 없기 떄문입니다.
c언어 동적 메모리 -3일차 첫 번째 (0) | 2022.12.07 |
---|---|
c언어 메모리할당 메모 -3일차..첫 번째 (0) | 2022.12.07 |
c언어 메모,정리 배열,포인터 -3일차 세 번째 (0) | 2022.12.07 |
c언어 메모,정리 배열,포인터 -3일차 두번째 (0) | 2022.12.07 |
c언어 메모, 정리 배열, 포인터-3일차 첫번째 (0) | 2022.12.07 |