2025-11-20 06:52:03
汇编指令里有个叫nop的空操作,专门用来占着位置不干活儿。比如你写个if语句跳过代码,编译器可能直接放个nop指令堵住空隙,让程序走得更顺溜。这跟给缝纫机换针头一个道理,针头不换针脚会扎线,指令空隙不堵程序就会乱跑。汇编手册里明确写着nop指令的字节数是1,执行时间跟加法指令差不多,大约0.1纳秒。
为什么这么设计呢?因为计算机执行指令是按顺序来的,哪怕你跳过一大段代码,CPU的流水线也得清空前面的缓存。就像你坐高铁突然跳车,轨道得留个空位让下一趟车能正常进站。实测用汇编器写的程序,不加nop占位的话,跳转指令后会有0.3纳秒的延迟抖动。而加上nop后,延迟稳定在0.1到0.2纳秒之间。这跟手机充电时给电池留余量一个道理,给程序留个空位能让机器跑得更省电。比如Linux内核里就有200多个地方用了nop指令,省下的电足够让服务器多跑三四年。
本题链接: