2012-03-24 3 views
0

매크로를 사용하는 것이 더 효율적인 프로그램을 얻으려면? 매크로를 사용하면 더 많은 바이너리 코드를 사용하고 실행 시간이 약간 줄어 들었습니다. 따라서 코드에 관련 매크로를 작성하는 것이 더 좋습니다.조립품 - 효율성 측면에서 매크로를 사용할 때?

(I 프로그래머, 내가 효율성에 대해 질문에 대한 간단한 코드와 매크로의 장점을 알고)

감사

+2

틀린 전제 - 매크로가 덜 효율적이어야하는 이유는 없습니다. "상용구"코드를 저장하는 것만으로는 충분하지 않습니다. –

+3

매크로는 프로그래머가 * 실제 * 기계 코드가 생성되는 것이 명백하지 않기 때문에 덜 효율적인 코드를 생성합니다. 매크로는보다 효율적인 코드를 생성합니다. 프로그래머가 실제로 perf에 중요한 코드 부분에 더 많은 두뇌주기를 소비 할 수 있기 때문입니다. 하나를 선택. –

답변

2

매크로는 효율적인가요? 왜 그럴까? 단지 같은 코드를 다시 작성하는 것을 막을 수 있습니다.

mov ax, HiWord 
ror eax, 16 
mov ax, LoWord 

때마다, 당신은 매크로에 넣어 :의 당신이 대신 작성하는, WM_COMMAND 꽤 많은 시간을 보내 Windows에서 가정 해 봅시다 이제

MAKEDWORD MACRO LoWord,HiWord 
    mov ax, HiWord 
    ror eax, 16 
    mov ax, LoWord 
    ENDM 

당신이해야 할 모든 것은 : MAKEDWORD somenumber, somenumber 그리고 결과는 함수에 전달하는 eax에있게됩니다. 전처리 기는 MAKEDWORD의 모든 인스턴스를 해당 코드로 바꿉니다. 매크로를 사용할 때의 단점 (적어도 필자가 느낀 점)은 여러 번 사용하면 "코드가 부풀어 오름"을 얻게됩니다. 매크로를 여러 번 사용하려면 매크로를 함수로 변경하는 것이 좋습니다. .

+0

예, 매크로를 사용하는 경우 (예 : 한 번만). 따라서이 경우 매크로를 작성하는 것이 효율적이지 않으며 코드에 작성하는 것이 좋습니다. 아니? –

+0

매크로는 작성한 코드만큼 효율적입니다. 매크로는 아무 것도 특별하지 않습니다. 전 처리기의 마커 일 뿐이므로이 줄의 모든 항목을이 코드로 바꿉니다. 매크로는 코드 작성을 쉽게하고 코드를 복잡하게 만드는 도구 일뿐입니다. – Gunner

+0

안녕하세요, 질문이 있습니다. 매크로 안에 매크로를 넣는 것이 맞습니까? –

1

현재 프로세서 (적어도 x86과 비슷 함)를 사용하면 매크로가 효율성을 높이고 실행 속도가 빨라지는 경우를 상상할 수 없습니다. 컴파일러가 특정 프로세서에 대해 효과적인 코드를 생성하기 위해 어떤 트릭을 사용하는지 비교할 수 있습니다. 동일한 작업을 명령, 레지스터 등을 변경하여 구현할 수 있습니다. 매크로를 사용하면 구체적인 레지스터, 명령 및 순서를 고수 할 수 있습니다. 이 모든 것은 효율성을주지 못합니다. 주목할만한 예외는 매크로가 특정 어셈블러에 알려지지 않은 명령의 구현 일 때입니다.

대신 요즘에는 일부 매크로 프로세서의 출력에서 ​​중간 언어 (LLVM과 같이)를 사용할 수 있으며 필요한 튜닝에 따라 기계어로 변환 할 수 있습니다. 그러나 이것은 매크로 사용 자체가 아닙니다.

0

조립과는 아무런 관련이 없습니다. 매크로는 타이핑을 저장하기위한 것으로, 어떤 경우에는 하루에 더 많은 코드를 작성할 수 있습니다. 또는 하루에 더 많은 코드를 디버깅하십시오. 또는 하루에 더 많은 코드를 유지하십시오. 동일한 이유로 정확히 C에서 ASM과 동일한 매크로를 사용할 수 있습니다. 마찬가지로 함수를 사용할 수 있습니다. 함수는 여러 가지 경우에 분기 및 스택을 사용하여 매크로에 비해 비용이 들지만 매크로는 비용이 들게 작성 될 수 있습니다.

회사 또는 프로젝트 프로그래밍 표준에 의하지 않으면 개인 기본 설정으로 이동합니다. 일부 사람들은 선형 적으로 프로그램을 작성하고 코드의 일부 블록 (언어와 관련이 없음)이 두 개 이상의 장소에 두 번 입력되고 위험에 따라 변경 될 수있는 위험이 있습니다. 기능. 종종 프로그램의 첫 번째 패스를 잘라내어 붙여 넣기 만하면 디버깅이 바뀌어야 함수가 만들어지고 여러 위치가 함수로 바뀝니다. 다른 극단은 무수히 많은 유틸리티 기능을 제시하는 문 밖에 있습니다. 궁극적으로 주 프로그램이 5 줄 길이라면, 각 기능은 12 줄 길이이며, 다른 모든 도우미 기능을 호출합니다. 현실은 어딘가에 있습니다. 이 모든 것은 타이핑과 초기 개발, 디버깅 및 유지 보수의 부작용에 관한 것입니다. 입력 작업이 적을수록 빠르게 처리 할 수 ​​있습니다.

+0

여기서주의해야 할 점은 어셈블리의 매크로가 프로세서가 아니라 어셈블러 도구에만 해당된다는 것입니다. 즉, 동일한 플랫폼이나 프로세서에서 이식 할 수 없습니다. 다른 언어의 매크로 일 수도 있고 아닐 수도 있습니다. 따라서 길을 따라 너무 많은 매크로 사용에주의를 기울여야합니다. 프로그램을 완전히 삭제하거나 도구를 올리거나 다시 쓰면서 다시 포팅해야 할 수도 있습니다. –

0

callreturn의 사이클을 저장하므로 명령 시퀀스가 ​​너무 짧으면 매크로를 사용해야합니다.