zig-alloc - 評価

評価スケール

基本評価 (100点満点)

項目 配点 評価基準
コンパイル 10点 `zig build` でエラーなく完了
FixedBufferAllocator 25点 基本機能が正しく動作
ArenaAllocator 25点 基本機能が正しく動作
LoggingAllocator 20点 ラッパーが正しく動作
テスト 10点 基本的なテストケースをパス
コード品質 10点 可読性、命名規則

ボーナス評価 (最大30点)

項目 配点
プールアロケータ 10点
スレッドセーフ 10点
メモリ統計 10点

課題の目的

学習目標

  • メモリ管理の理解
- 手動メモリ管理の重要性 - アロケーションのコスト

  • Zigの型システム
- コンパイル時計算 - ジェネリクスの活用

  • インターフェース設計
- Allocatorインターフェースの理解 - 依存性注入パターン

習得スキル

  • カスタムアロケータの設計と実装
  • メモリリークの検出と防止
  • パフォーマンス最適化の基礎
  • 評価手順

    1. コンパイル確認

    zig build
    # または
    zig build-exe src/main.zig
    

    2. テスト実行

    zig build test
    

    3. 機能テスト

    // FixedBufferAllocator のテスト
    test "fixed buffer allocation" {
        var buffer: [1024]u8 = undefined;
        var fba = FixedBufferAllocator.init(&buffer);
        const allocator = fba.allocator();
    
        const slice = try allocator.alloc(u8, 100);
        try std.testing.expect(slice.len == 100);
    }
    
    // ArenaAllocator のテスト
    test "arena allocation" {
        var arena = ArenaAllocator.init(std.heap.page_allocator);
        defer arena.deinit();
    
        const allocator = arena.allocator();
        _ = try allocator.alloc(u8, 1000);
        // deinit で一括解放
    }
    

    減点対象

    項目 減点
    メモリリーク -20点
    未定義動作 -15点
    テスト失敗 -5点/件
    Norm違反 -2点/件

    合格基準

  • マンダトリーパート: 80点以上
  • ボーナスなしの最高点: 100点
  • ボーナス込みの最高点: 130点