只要是函数,不管是c还是rust都是要push/pop的。你看不到push/pop只是因为编译器帮你inline掉了。
但在你这种一个tick要掰成2个用的关键场合,依赖编译器来帮你做这种事情,真的踏实嘛?这种一般都是直接asm的。
给个rust内嵌asm的例子:
use std::arch::asm;
let i: u64 = 3;
let o: u64;
unsafe {
asm!(
"mov {0}, {1}",
"add {0}, 5",
out(reg) o,
in(reg) i,
);
}
assert_eq!(o, 8);
顺便,c因为抽象层面太低了,在编译期有很多信息是获取不到的。所以轮优化潜力其实并不算高。
类似的例子c++已经宣传了十几年了,比如每次都要拿出来说的事的那个qsort...
rust这方面也和c++一样,对c有压倒性的优势,但rust的编译器还没有发展到c++这么成熟,所以只能说未来可期。
【 在 dismoon 的大作中提到: 】
: 你把C和rust都等价到汇编,你会发现,只要你用函数,就免不了push pop,而C,就是简单粗暴的一条赋值汇编,我的MCU场合,的确一个时钟脉冲都要掰两半用的
:
--
FROM 180.111.26.*