푸쉬와 팝에 관해 궁금한게 있습니다
308
작성한 질문수 11
1) 함수를 실행할때
함수에서 작성한 지역변수나, 메인함수속 내부함수는
해당 코드가 실행될떄,
Stack.push로 스택에 넣어둠과 동시에
함수와 지역변수들은 스택메모리를 차지하는것이고
내부함수가 끝날떄
내부함수속 지역변수+ 내부함수들은
스택의 함수 특성상 기능을 다하면 사라지니
Stack.pop으로 스택에 최근차지했던
(코드흐름상 현재 내부함수)
메모리공간을 다시 풀어주는게 맞는가요?
2) bp는 현재 스택영역에서의 기준점 sp는 현재 스택의 위치로 이해하였습니다
메인함수에서 내부함수로 들어갈떄
내부함수가 끝나고 다시 메인함수에서 나머지 진행을위해
push로 bp(현재 위치)를 넣고
그다음 내부함수 진행을 위해 현재 스택위치 sp를
bp에 넣어서 내부함수 진행을 하는것으로 이해했습니다
(내부함수 끝날떄는 처음 push했던 bp로 돌아오는것)
질문을 옳게 한지 잘 모르겠습니다..
답변 1
1
1) 함수에서 작성한 지역변수나, 메인함수속 내부함수는
해당 코드가 실행될떄,
Stack.push로 스택에 넣어둠과 동시에
함수와 지역변수들은 스택메모리를 차지하는것이고
=>
지역변수는 스택에 들어가지만
함수 OpCode는 코드 영역에 위치해 있습니다.
push pop 비슷하게 하긴 하지만,
메모리를 항상 다시 '풀어주는' 개념이라기 보다는
bp, sp 위치만 변화시켜 유효 범위를 바꿔줍니다.
2) bp는 현재 스택영역에서의 기준점 sp는 현재 스택의 위치로 이해하였습니다
메인함수에서 내부함수로 들어갈떄
내부함수가 끝나고 다시 메인함수에서 나머지 진행을위해
push로 bp(현재 위치)를 넣고
그다음 내부함수 진행을 위해 현재 스택위치 sp를
bp에 넣어서 내부함수 진행을 하는것으로 이해했습니다
(내부함수 끝날떄는 처음 push했던 bp로 돌아오는것)
=>
네! 이 부분이 이해가 굉장히 어려운데 그게 맞습니다.
bp를 push하는 것은 [헨젤과 그레텔]에서 빵 뿌스러기를 생각하면 됩니다.
참고로 해킹 분야에서는 이 bp나 ip 쪽 레지스터를 조작하기 위해 부단한 노력을 합니다.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
558
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
453
1
strcpy() 구현 관련 질문
0
531
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
474
1
클래스 타입의 포인터 질문합니다
0
558
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
503
1
템플릿 특수화 관련 질문
0
389
1
포인터 관련 질문합니다!
0
270
1
Unable to start assembler. Check your settings.
0
846
2
cpu선택
0
548
1
포인터 질문이 있습니다
0
331
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
589
1
iterator 삭제관련
0
413
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
316
1
15 분 45초 대 질문
0
315
0
스택 프레임 질문합니다!
2
311
1
오른값 참조 in 게임
0
391
0
동적할당 질문이 있습니다
0
457
1
안녕하세요 메모리에 대해 질문드립니다.
0
311
1
함수객체 의 매개변수
0
365
1
복사생성자
0
439
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
430
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
358
1
스택 오버플로우
2
801
1





