// 只编入 --memory 产物,复用原输入与两侧函数;普通计时产物不改变。 // 全进程初始化和输入也会被探针计数,零次调用作为相同场景的基线。 fn compare_output(name: &str, values: &Input, _: &Input, _: usize, generated: fn(&Input) -> Result, reference: fn(&Input) -> Result, score: fn(&Output) -> u64, reference_name: &str) { let selected = std::env::var("DEVER_HEAP_CASE").expect("DEVER_HEAP_CASE"); if selected != name { return; } let implementation = std::env::var("DEVER_HEAP_IMPL").expect("DEVER_HEAP_IMPL"); let count = std::env::var("DEVER_HEAP_COUNT").expect("DEVER_HEAP_COUNT").parse::().unwrap(); let operation = if implementation == "dever" { generated } else { assert_eq!(implementation, reference_name); reference }; let operation = black_box(operation); let mut checksum = 0u64; for _ in 0..count { let value = black_box(operation(black_box(values)).unwrap()); checksum = checksum.wrapping_add(black_box(score(&value))); drop(value); } println!("heap,{name},{implementation},{count},{checksum}"); // RSS 单独在未加载分配探针的进程读取,避免把探针静态表算进语言成本。 if std::env::var_os("DEVER_HEAP_RSS").is_some() { let status = std::fs::read_to_string("/proc/self/status").unwrap(); for line in status.lines().filter(|line| line.starts_with("VmRSS:") || line.starts_with("VmHWM:")) { println!("heap_rss,{line}"); } } }