zig-alloc - 評価
評価スケール
基本評価 (100点満点)
| 項目 |
配点 |
評価基準 |
| コンパイル |
10点 |
`zig build` でエラーなく完了 |
| FixedBufferAllocator |
25点 |
基本機能が正しく動作 |
| ArenaAllocator |
25点 |
基本機能が正しく動作 |
| LoggingAllocator |
20点 |
ラッパーが正しく動作 |
| テスト |
10点 |
基本的なテストケースをパス |
| コード品質 |
10点 |
可読性、命名規則 |
ボーナス評価 (最大30点)
| 項目 |
配点 |
| プールアロケータ |
10点 |
| スレッドセーフ |
10点 |
| メモリ統計 |
10点 |
課題の目的
学習目標
- 手動メモリ管理の重要性
- アロケーションのコスト - コンパイル時計算
- ジェネリクスの活用 - 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点