是否有一个与C ++中的时钟函数相当的Rust?

时间:2016-04-19 11:06:37

标签: rust libc

我试图测试代码部分的效率,而C ++在clock中有一个ctime函数,允许使用{{}来测量程序所消耗的处理器时间。 1}}类型。是否有一些Rust等价物不仅仅是测量代码中两点之间的绝对时间?

2 个答案:

答案 0 :(得分:5)

如果必需使用clock,则需要添加一些垫片。至少在OS X上,似乎libc不公开clock,但它 给你clock_t(这是等式中较难的部分)。然后公开clock直截了当:

extern crate libc;

mod ffi {
    extern {
        pub fn clock() -> ::libc::clock_t;
    }
}

fn main() {
    let start = unsafe { ffi::clock() };

    let mut dummy = 0;
    for i in 0..20000 { dummy += i };

    let end = unsafe { ffi::clock() };
    println!("{}, {}, {}, {}", dummy, start, end, end - start);
}

我可能会创建一个包装器,标记clock在任何情况下都可以安全地调用。

答案 1 :(得分:3)

我一直在使用此代码:

extern crate libc;

use std::mem;
use std::io;
use std::time::Duration;

pub fn cpu_time() -> Duration {
    unsafe {
        let mut tp = mem::uninitialized();
        if sys::clock_gettime(sys::CLOCK_PROCESS_CPUTIME_ID, &mut tp) == 0 {
            Duration::new(tp.tv_sec as u64, tp.tv_nsec as u32)
        } else {
            panic!("cpu_time: {}", io::Error::last_os_error());
        }
    }
}

mod sys {
    use libc::{c_int, timespec};
    extern "C" {
        pub fn clock_gettime(clk_id: c_int, tp: *mut timespec) -> c_int;
    }
    pub const CLOCK_PROCESS_CPUTIME_ID: c_int = 2;
}
相关问题