2013-04-16 2 views
2

C 프로그램의 두 정수 또는 포인터 매개 변수가있는 inline 함수를 호출 할 때 이들은 rdirsi 레지스터에 전달됩니다. inline 함수에 대한 정수/포인터 매개 변수가 레지스터에 전달되는 방식으로 컴파일을 수행 할 수 있습니까 (아니요 스택에)?Linux로 전달되는 매개 변수 C 인라인 함수

답변

3

Counter 질문 : 왜 신경 쓰시겠습니까? 나는 당신이하지 말아야한다고 생각합니다. 그것이 당신의 컴파일러 작업입니다. 컴파일러가 올바른 일을 할 수 있다고 믿지 않는다면, 컴파일러를 전혀 사용하지 않아야합니다.

그리고 저는 매개 변수가 레지스터에 상륙한다는 보장이 틀렸다고 확신합니다.

6

함수가 인라인되면 함수를 호출 한 함수에 해당 코드가 작성된 것처럼 처리됩니다. 이 경우 매개 변수가 전혀 전달되지 않습니다.

함수가 인라인되지 않으면 함수와 전혀 다릅니다. inline은 컴파일러에서 함수를 인라인하려고하는 힌트 일뿐입니다. 그것은 연결에 전혀 영향을 미치지 않습니다.

+0

수정, 인라인 함수는 컴파일러의 재량에 따라 인라인 될 수 있습니다. –

+1

해답이 명확 해졌습니다. – duskwuff

0

C에서 첫 번째 두 정수는 % rdi 및 % rsi ...로 전달되지 않습니다. 이는 ABI/통화 규칙 문제입니다. 언어 문제가 아닙니다. 함수가 인라인과 주변 코드의 나머지 부분은 그것을 허용됩니까 경우

의 INT의의 가능성이 범용 레지스터에있을 것입니다 ...

그러나 이것은 절대적 문제가되지 않습니다 ... 그리고 당신이 경우 당신은 단지 컴파일러가 읽을 수있는 asm을 생성 할 수 있습니다 ...

관련 문제