基本上,当遵循《Rust in Action:System's Programming Concepts And Techniques》一书时,该material 实现了一个自定义分配器(它基本上调用System allocator,但打印出分配时间等).我想我可以修改自定义分配器将分配时间写入文件,这样我就可以用Pandas做一些EDA,但这似乎失败了,因为我现在已经得到了上述错误.
#[global_allocator]
static ALLOCATOR: ReportingAllocator = ReportingAllocator;
struct ReportingAllocator;
unsafe impl GlobalAlloc for ReportingAllocator{
unsafe fn alloc(&self, layout : Layout) -> *mut u8{
let start = Instant::now();
let ptr = System.alloc(layout);
let end = Instant::now();
let time_taken = end - start;
let bytes_requested = layout.size();
//TODO: convert data to strings and pass to func
let str_bytes = format!("{}", bytes_requested);
let str_time = format!("{}", time_taken.as_nanos());
log_data(str_bytes, str_time);
// eprintln!("{}\t{}", bytes_requested, time_taken.as_nanos());
return ptr;
}
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) -> (){
System.dealloc(ptr, layout);
}
}
函数日志(log)数据如下:
fn log_data(mem: String, time: String){
let mut test = match File::options().append(true).open("src/log_data.csv"){
Ok(var) => var,
Err(_) => panic!("File could not be opened in read only mode!")
};
writeln!(&mut test, "{}, {}", mem, time).expect("Unsuccessful Write");
}
该文件是在main函数中创建的.
所以现在我不知道如何仍然写入文件,并避免错误