나는 파일 시스템에서 많은 것들을 읽고, 결과를 필터링하고, 인쇄하는 간단한 프로그램을 가지고있다. 이 간단한 프로그램은 선택을 쉽게하기 위해 도메인 특정 언어를 구현합니다. 이 DSL은 (입력이 C:\Windows\System32\* OR -md5"ABCDEFG" OR -tf
이었다)이처럼 보이는 실행 계획 아래로 "컴파일"어디에서이 최적화 문제를 시작할 수 있습니까?
Index Success Failure Description
0 S 1 File Matches C:\Windows\System32\*
1 S 2 File MD5 Matches ABCDEFG
2 S F File is file. (Not directory)
성공 필드이고, 실패하면 실패 포인터에 표시된 수로 이동합니다. "S"는 파일이 필터를 통과 함을 의미하고, F는 파일이 거부되어야 함을 의미합니다.
물론 간단한 파일 특성 (! FILE_ATTRIBUTE_DIRECTORY) 검사를 기반으로하는 필터는 파일의 실제 해시를 열고 실행해야하는 파일의 MD5를 기반으로하는 검사보다 훨씬 빠릅니다. 각 필터 "opcode"에는 이와 관련된 시간 클래스가 있습니다. MD5는 높은 타이밍 번호를 가지며, ISFILE은 낮은 타이밍 번호를 얻습니다.
이 실행 계획의 순서를 변경하여 오랜 시간이 소요되는 opcode가 가능한 한 거의 실행되지 않도록하고 싶습니다. (적어도에 따라 세 개의 주소 코드에 대한 NP-전체 문제를 실행의 가장 좋은 순서입니다 따기 "드래곤 도서"에 따르면
Index Success Failure Description
0 S 1 File is file. (Not directory)
1 S 2 File Matches C:\Windows\System32\*
2 S F File MD5 Matches ABCDEFG
: 위의 계획을 위해, 그게 될 것 의미 그 텍스트의 두 번째 판의 511 쪽),이 경우 그들은 레지스터 할당과 기계의 다른 문제에 대해 이야기하고있다. 제 경우에는 실제 "중간 코드"가 훨씬 간단합니다. 근원 IL을 최적의 실행 계획으로 재주문 할 수있는 계획이 있는지 궁금합니다. 여기
은 또 다른 예입니다{C : \ WINDOWS \ Inf를 * 및 -TP} 또는 {-tf AND NOT C : \ WINDOWS \ SYSTEM32 \ 드라이버 *} :
Index Success Failure Description
0 1 2 File Matches C:\Windows\Inf\*
1 S 2 File is a Portable Executable
2 3 F File is file. (Not directory)
3 F S File Matches C:\Windows\System32\Drivers\*
는 구문 분석
최적입니다 :
Index Success Failure Description
0 1 2 File is file. (Not directory)
1 2 S File Matches C:\Windows\System32\Drivers\*
2 3 F File Matches C:\Windows\Inf\*
3 S F File is a Portable Executable
나는 여기에 큰 문제가 표시되지 않습니다. 왜 '비용'경험적 방법으로 모든 것을 엄격하게 주문할 수 없습니까? – strager
@ Neeil : C++과 관련이 없다고 생각합니다. 태그 제거 중. @ 스트 래거 : 오류 ... 만약 당신이 단지 정렬하면 표현의 의미가 바뀔 것입니다. –
아, 나는 오해했다. @ 그렉 Hewgill의 다이어그램은 나를 이해하는 데 도움이되었습니다. – strager