함수 호출시 함수의 매개 변수와 리턴 값이 담길 메모리가 할당되는데 이때
1. 매개변수로 받은 값이 heap 영역에 있는 변수의
래퍼런스 타입이거나,포인터타입 이거나 혹은 값인 3가지 경우 모두 어떠한 경우에도
매개변수를 담을 메모리가 스택영역에 할당되나요?
2. 1번의 이러한 메모리할당은 for 구문이나 그외 의 반복문 혹은 switch구문 모두 비슷하게 동작하나요?
-예시-
int i;
for(i=0;i<3;i++)
{
}
---------
3.혹시 반복문이나 조건문의 경우 매개변수를 조건식으로 받는 일종의 함수 이기도 한가요?
4. 필드 라고 불리는 것은 { }기호나, 전역, 함수 내부 등의 '범위'를 의미하는 건가요?
힙 메모리의 주소가 담긴 포인터변수는 무조건 스택 할당임
2번은 무슨소리인지 잘 모르겠고 반복'문', 조건'문' 이니까 함수랑 아예 개념부터가 다름. 어셈수준에서 반복문이나 조건문은 jmp로 구현된느데 대부분의 함수는 call로 구현됨
2번은 함수의 매개변수를 저장할 메모리를 할당하는것처럼 조건식 의 참거짓을 bool형식으로 할당하기도 하는지 궁금해요
if 조건을 어디에 저장하는거 말하는거면 if는 cmp로 어셈되는데 레지스터랑 메로리 둘 다 가능함
답변 감사합니다!
1. 항상은 아니고 2. 1번이 아니니 2번도 항상은 아니다. 3. 아니다 4. 뭔 소리인지 모르겠다. 그리고 과제는 스스로 해라
답변 감사합니다
걍 컴파일러랑 아키텍처 마음일거같은데 이론만 따지면 스택에 안저장하고 레지스터에만 있을수도 있음 x86_64 기준이면 매개변수가 레퍼런스건 포인터건 일반 값이건 rsi rdi r8 r9 이런 순으로 레지스터에 먼저 저장되고 그래도 부족하면 스택으로 넘어감 반대로 x86은 걍 다 스택 쓰고
수업 열심히 듣자 - dc App
이건 프로그램 어셈블리 뽑아서보면 다 나옴 읽는법이 그렇게 어렵진않으니 설명한번보고 ㄱㄱ - dc App