---
generated_at: 2026-02-17 12:25:00
metrics:
  claims_total: 32
  claims_with_evidence: 32
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート: 56-memfiles（メモリマップトファイル）

## サマリー

本レポートは機能設計書「56-memfiles（メモリマップトファイル）」の記載内容について、ソースコードに基づく根拠を示す。全32件の主張がすべてソースコードで確認可能であり、信頼度は1.00と評価される。

## Evidence一覧

| Evidence ID | ファイル | 行番号 | 内容 |
|------------|---------|--------|------|
| E-001 | lib/pure/memfiles.nim | 10-16 | モジュール説明「memory mapped files」 |
| E-002 | lib/pure/memfiles.nim | 18-25 | Windows/POSIX条件コンパイル |
| E-003 | lib/pure/memfiles.nim | 72-86 | MemFile型定義 |
| E-004 | lib/pure/memfiles.nim | 74-76 | mem, sizeフィールド |
| E-005 | lib/pure/memfiles.nim | 79-83 | Windows固有フィールド（fHandle, mapHandle, wasOpened） |
| E-006 | lib/pure/memfiles.nim | 85-86 | POSIX固有フィールド（handle, flags） |
| E-007 | lib/pure/memfiles.nim | 88-123 | mapMemプロシージャ |
| E-008 | lib/pure/memfiles.nim | 94-95 | fmAppend非対応エラー |
| E-009 | lib/pure/memfiles.nim | 99-105 | MapViewOfFileEx（Windows） |
| E-010 | lib/pure/memfiles.nim | 116-121 | mmap（POSIX） |
| E-011 | lib/pure/memfiles.nim | 126-136 | unmapMemプロシージャ |
| E-012 | lib/pure/memfiles.nim | 139-298 | openプロシージャ |
| E-013 | lib/pure/memfiles.nim | 177-178 | fmAppend非対応チェック |
| E-014 | lib/pure/memfiles.nim | 212 | CreateFileW（Windows） |
| E-015 | lib/pure/memfiles.nim | 222-225 | CreateFileMappingW（Windows） |
| E-016 | lib/pure/memfiles.nim | 230-236 | MapViewOfFileEx（Windows） |
| E-017 | lib/pure/memfiles.nim | 266/271 | posix.open（POSIX） |
| E-018 | lib/pure/memfiles.nim | 291 | mmap（POSIX） |
| E-019 | lib/pure/memfiles.nim | 38-70 | setFileSizeプロシージャ |
| E-020 | lib/pure/memfiles.nim | 57-59 | posix_fallocate |
| E-021 | lib/pure/memfiles.nim | 62/69 | ftruncate |
| E-022 | lib/pure/memfiles.nim | 299-319 | flushプロシージャ |
| E-023 | lib/pure/memfiles.nim | 306 | FlushViewOfFile（Windows） |
| E-024 | lib/pure/memfiles.nim | 314 | msync（POSIX） |
| E-025 | lib/pure/memfiles.nim | 321-373 | resizeプロシージャ |
| E-026 | lib/pure/memfiles.nim | 360-364 | mremap（Linux） |
| E-027 | lib/pure/memfiles.nim | 375-408 | closeプロシージャ |
| E-028 | lib/pure/memfiles.nim | 410-413 | MemSlice型定義 |
| E-029 | lib/pure/memfiles.nim | 424-471 | memSlicesイテレータ |
| E-030 | lib/pure/memfiles.nim | 461 | c_memchr使用 |
| E-031 | lib/pure/memfiles.nim | 473-505 | linesイテレータ |
| E-032 | lib/pure/memfiles.nim | 507-571 | MemMapFileStream型とnewMemMapFileStream |

## Claims対応表

| Claim ID | 主張内容 | Evidence ID | 検証結果 |
|----------|---------|-------------|---------|
| C-001 | memfilesモジュールはメモリマップトファイルを提供 | E-001 | 確認済 |
| C-002 | Windows/POSIXの両方をサポート | E-002 | 確認済 |
| C-003 | MemFile型はmemとsizeを持つ | E-004 | 確認済 |
| C-004 | Windows版はfHandle, mapHandle, wasOpenedを持つ | E-005 | 確認済 |
| C-005 | POSIX版はhandle, flagsを持つ | E-006 | 確認済 |
| C-006 | mapMemで追加領域をマッピング | E-007 | 確認済 |
| C-007 | fmAppendモードは非対応 | E-008, E-013 | 確認済 |
| C-008 | WindowsではMapViewOfFileExを使用 | E-009, E-016 | 確認済 |
| C-009 | POSIXではmmapを使用 | E-010, E-018 | 確認済 |
| C-010 | unmapMemでマッピング解除 | E-011 | 確認済 |
| C-011 | openでファイルをマッピング | E-012 | 確認済 |
| C-012 | WindowsではCreateFileWを使用 | E-014 | 確認済 |
| C-013 | WindowsではCreateFileMappingWを使用 | E-015 | 確認済 |
| C-014 | POSIXではposix.openを使用 | E-017 | 確認済 |
| C-015 | setFileSizeでファイルサイズ設定 | E-019 | 確認済 |
| C-016 | posix_fallocateでスペース予約 | E-020 | 確認済 |
| C-017 | ftruncateでサイズ変更 | E-021 | 確認済 |
| C-018 | flushで変更を同期 | E-022 | 確認済 |
| C-019 | WindowsではFlushViewOfFileを使用 | E-023 | 確認済 |
| C-020 | POSIXではmsyncを使用 | E-024 | 確認済 |
| C-021 | resizeでマッピングサイズ変更 | E-025 | 確認済 |
| C-022 | Linuxではmremapを使用 | E-026 | 確認済 |
| C-023 | closeでリソース解放 | E-027 | 確認済 |
| C-024 | MemSlice型はdataとsizeを持つ | E-028 | 確認済 |
| C-025 | memSlicesイテレータでゼロコピー行処理 | E-029 | 確認済 |
| C-026 | c_memchrでデリミタ検索 | E-030 | 確認済 |
| C-027 | linesイテレータでNim文字列を返す | E-031 | 確認済 |
| C-028 | MemMapFileStreamでストリーム抽象を提供 | E-032 | 確認済 |
| C-029 | offsetはページサイズの倍数が必要 | E-001 | 確認済（ドキュメント記載） |
| C-030 | MAP_SHAREDがデフォルト | E-010 | 確認済（113-114行） |
| C-031 | リサイズ時newFileSize >= 1が必要 | E-025 | 確認済（328-329行） |
| C-032 | mremapはmunmap+mmapより100倍高速 | E-026 | 確認済（コメント記載） |

## 不足情報

| 項目 | 説明 | 影響度 |
|------|------|--------|
| なし | すべての主張がソースコードで確認可能 | - |

## リスクフラグ

| リスク | 説明 | 対応策 |
|--------|------|--------|
| バッファオーバーラン | MemSliceは生ポインタ | サイズ確認必須 |
| 境界外アクセス | mem直接アクセス時 | サイズ確認必須 |
| 競合状態 | MAP_SHAREDでの同時書き込み | 適切なロック機構使用 |
| ページサイズ違反 | offsetがページサイズの倍数でない | OSエラーで検出 |
| リソースリーク | closeを呼び忘れ | deferで確実にクローズ |

## レビュアーチェックリスト

- [x] MemFile型の説明がソースコードと一致している
- [x] mapMem/unmapMemの説明が正確である
- [x] openの説明がソースコードと一致している
- [x] setFileSizeの説明が正確である
- [x] flush/resize/closeの説明が正確である
- [x] memSlices/linesイテレータの説明が正確である
- [x] MemMapFileStreamの説明が正確である
- [x] Windows/POSIXの条件コンパイルが正確に記載されている
- [x] コードリーディングガイドの行番号が正確である
