fast_ntfs 1.0.2

Forked a low-level NTFS filesystem library
Documentation
# 추가 최적화 검토 결과 (2026-07-13)


초기 검토에서 확인한 핫패스 최적화를 구현하고 `testdata/testfs1`로 다시 측정한 결과입니다.

## 최종 기준


| 벤치마크 | 시간 | 할당 횟수 | 할당 바이트 | 잔류 바이트 |
|---|---:|---:|---:|---:|
| `file/load_root_record` | 약 410 ns | 2 | 2,048 | 0 |
| `file/load_root_record_cached` | 약 64 ns | 0 | 0 | 0 |
| `file/load_root_record_resolver` | 약 70 ns | 0 | 0 | 0 |
| `large_directory/build_index` | 약 783 ns | 3 | 216 | 216 |
| `large_directory/iterate_512` | 약 15.6 us | 6 | 8,600 | 0 |
| `large_directory/find_all_512` | 약 123 us | 47 | 109,936 | 0 |

시간은 같은 Windows 호스트에서 Criterion warm-up 1초, measurement 3초, sample 30으로 측정했다.
할당은 `benches/allocations.rs`의 결정적 측정값이다.

## 반영한 변경


1. `d4c6149` — 캐시된 인덱스 노드의 엔트리를 한 번 색인하고 이진 탐색한다.
   512개 이름 조회가 약 319 us에서 145 us로 54% 단축되었다. 노드별 색인 때문에 해당
   벤치의 할당은 25회에서 47회로 증가하지만 반복 검색 시간은 크게 감소한다.
2. `5372159``$INDEX_ROOT``$INDEX_ALLOCATION`을 한 번의 속성 순회에서 찾고,
   파싱한 데이터 런을 임시 벡터와 복제 없이 최종 캐시로 이동한다. 인덱스 생성 할당이
   6회/552바이트에서 3회/216바이트로 감소했다.
3. `11c7650``NtfsIndexRecords`가 값 리더를 복제한 뒤 원본을 별도 seek하지 않고,
   원본 스트림에서 직접 읽으며 전진한다.
4. `147ead4` — 파일명, Attribute List 이름, 볼륨 이름의 `ArrayVec`를 최대 510바이트로
   초기화하지 않고 실제 검증된 이름 길이만 초기화한다.
5. `ad42c92` — MFT 런 캐시 준비와 File Record 버퍼 재사용을 묶은 `NtfsFileResolver`   추가했다. 반복 조회는 호출당 힙 할당이 없다.
6. `e59c245` — sparse index run을 재사용 버퍼로 읽을 때 이전 레코드 데이터가 남지 않도록
   해당 범위를 명시적으로 0으로 채운다.

## 의도적으로 남긴 항목


`NtfsIndexRoot::entry_ranges`는 루트 엔트리 슬라이스를 소유 `Vec`으로 복사한다. 일반적인
`NtfsAttributeItem`은 Attribute List의 확장 File Record를 직접 소유할 수 있으므로, 이 복사를
없애려면 `IndexNodeEntryRanges` 전체에 borrowed/owned storage lifetime을 전파하거나 자기참조
구조를 피하는 별도 소유권 계층이 필요하다. 현재 전체 인덱스 생성 비용이 3회/216바이트에
불과해 복잡도와 API 위험 대비 우선순위가 낮다고 판단했다.

## 검증 명령


```sh
cargo test --all-features
cargo clippy --all-targets --all-features -- -D warnings
cargo check --no-default-features
cargo bench --bench allocations
cargo bench --bench performance
```