반응형

학습자료(~2017)/C,C++ 22

함수 호출 과정과 스택 프레임 Stack Frame

함수 호출 과정과 스택 프레임Stack Frame 1. 인자를 스택에 집어 넣는다 // int main(int argc, char* argv[]) x = function(a, b, c); 0041117E mov eax,dword ptr [c] 00411181 push eax // 인자 c를 스택에 집어넣는다 00411182 mov ecx,dword ptr [b] 00411185 push ecx // 인자 b를 스택에 집어넣는다 00411186 mov edx,dword ptr [a] 00411189 push edx // 인자 a를 스택에 집어넣는다 표 1) 인자를 스택에 집어 넣는 어셈블리 코드와 스택의 상태 2. 함수를 호출한다 0041118A call function (4110A5h) 표 2) 함수를 ..

register 변수와 volatile 변수

register 변수와 volatile 변수 == register 변수 변수는 보통 컴퓨터의 메모리에 저장된다. 그러나 운이 좋으면 레지스터 변수는 CPU 레지스터 또는 더 일반적으로 가장 빠른 메모리에 저장되는데, 보통 변수보다 더 빠르게 접근하고 계산될 수 있다. 이외의 부분들은 자동변수와 똑같다. 이때 운이 좋으면 이라고 표현한 것은 레지스터 변수의 수가 제한되기 때문이다. 컴파일러는 레지스터 수와 선언된 변수의 수를 가중치에 따라 조정하기 때문에 레지스터 변수로 선언했지만 자동 변수로 되는 경우도 있을 수 있다. 그리고 레지스터 변수로 선언될 수 있는 형도 제한이 있다. 또한 & 연산자도 레지스터 변수에는 적용할 수 없다. == volatile 변수 변수를 register가 아닌 메모리에 저장한다..

반응형