댓글 4
-
김윤기
2011.04.13 08:52
-
이종인
2011.04.13 14:34
왜 스택을 사용하여서 asmlinkage function(int a, int b) 같은 함수를 호출 해야 하느냐에 대한 의문이 계속 듭니다.
일반적으로 함수 호출 할 때 컴파일러가 빠른 속도를 위해서(최적화 기법) 인자들을 레지스터에 넣고 넘길텐데요,
왜 구지 스택을 이용해야 되는지(왜 최적화 기법을 사용하면 안되는지) 이해가 안되네요,
어샘블리코드에서 해당 함수를 수행하기 위해서라고 들었는데
그렇다는 것은 어셈블리 코드에서는 함수를 호출 할 때 레지스터를 사용해서 그 해당 함수 인자를 넘기는 부분이 없다는 생각이 듭니다. 그래서 스택을 사용해서 함수의 인자를 넘기는 것이 겠죠..
(반대로 C 코드에서는 컴파일 할 때(최적화 기법으로) 함수 인자들을 register로 넣는 부분을 추가 해주고 해당 함수를 호출 하는 것이고)
여기까지가 생각인데요, 어셈블리 언어(x86이나 arm)를 잘 몰라서 그러는데 맞는건가요? -_-.......;;
-
홍문화
2011.04.13 16:23
어셈블리 코드에서 레지스터를 사용해서 해당 함수 인자를 넘기는 부분이 없는게 아니구요.
x86은 CISC 이므로 RISC에 비해 레지스터가 많이 부족 하겠죠.
즉, 레지스터가 부족하므로 SDRAM의 스택을 사용하겠다는 의미로 해석해야 할 것 같습니다.
arm과 같은 RISC는 레지스터가 많으므로 이를 사용해 인자를 넘기게 되겠지요.
확실한건 코드를 봐야 알겠지만 asmlinkage는 아키텍처별로 조건부 컴파일에 의해 RISC에서는 무시되지 않을까 생각합니다.
-
김용욱
2011.04.15 14:25
.
좋은글 감사합니다 ^^