2012-01-19 5 views
0

프로세서 스택에서 mov 및 pop 등은 단일 명령입니다.사용자 스택 대신 액세서리 함수 호출을위한 단일 명령 푸시/팝?

컴파일러는 단일 기계 명령어 버전을 생성하지만 런타임 중에는 스택이 ... 일반 스택 컨테이너라고 가정하고 런타임 중에 스택에 저장된 값에 액세스하면 수많은 기계어로 번역 할 수 있습니다.

단일 기계 명령어보다 길게 설정된 setter 및 getter 멤버 함수를 사용하는 대신 동적 런타임 객체에 대해 동일한 수준의 효율성을 달성 할 수 있습니까?

내 생각은 마크 포인터를 사용하는 것이지만 기능 호출에 의지하지 않고 런타임시 메모리 위치 나 메모리 위치에 값을 문자 그대로 밀어 넣는 방법을 모르겠습니다.

인라인 조립은 아마도 옵션 일 수 있으므로 가능한 경우 피하고 싶습니다. 그러나 나는 그것이 여전히 하나의 명령이되지 않도록 함수 본문에 넣어야한다고 생각합니다.

+0

컴파일러가 C 함수를 인라인 할 수 있다는 것을 알고 계실 겁니다. 맞습니까? – Borealid

+0

아이디어를 함수로 올바르게 표현하면 정말 좋은 * 컴파일러 *가 바로 사용할 수 있습니다. In-lining은 당신을 가장 잘 이끌어 줄 것이고, 현대 컴파일러는 그렇게합니다. 사용중인 컴파일러의 어셈블리 출력을 검사 해보십시오. – dmckee

답변

1

getter/setters에서 callret을 제외하는 것이 좋습니다. 이 경우 키워드 inline을 사용하여 해당 기능을 인라인하도록 컴파일러에 지시 할 수 있습니다. 또 다른 방법은 너무 복잡하지 않으면 C 매크로 함수를 사용하여 getters/setter를 코딩하는 것입니다.