最近在写c代码时底气越来越弱,原因在于某些调用的开销,我心里并不是十分明确。写起代码来由于纠结也就变的畏畏缩缩。
今天终于抽时间测了一下,仅测试了最近常遇到的一些调用的开销。
测试环境如下:
CentOS release 6.7(Final)
CPU:Intel(R)Xeon(R)CPU E3-1230 V2 @ 3.30GHz
采用gcc(glibc)编译,未开任何优化。
在测试时,大部分操作cache均会命中,因此如果cache经常命中失效,还需要另外考虑。
测试结果如下:
可以看出for循环是最廉价的。
malloc是开销最大的,这还是在单线程的情况下,如果再多线程由于锁的开销malloc的代价将会更甚。
在栈上分配1M次内存的代价几乎等同于for了1M次,在栈上分配内存开销最低。
而copy了64M内存也才花费了5ms而已。