王的男人
分类: C/C++
2013-04-02 00:04:21
前段时间在公司移植一个工具的时候,历经千辛万难,终于把工具移植过去了。因为工具涉及到写Nand Flash,所以需要将写入的数据读出来,确认是否数据被正确的写入到flash上。结果,发现两者的效率确实有相当大的差异。于是,就着手开始找问题出在哪里。由于是和nand flash相关,最开始是以为移植后的nand驱动的效率不高导致。但是最后,定位到是memcmp。
1. 编译的工具使用的是memcmp,但是memcmp通过__attribute__("alisa")定义为另外一个自己写的函数的别名.
int my_memcmp(void *s1, void *s2, int len)__attribute__((alias("my_memcmp"));
但是,my_memcmp的效率太低了。导致工具移植后的效率也降下来。
my_memcmp的实现大致如下:
但是,发现效率也并没有太大的改善。
3. 将电脑中gcc库,通过obj-dump工具,将gcc的库反汇编出来,看看工具链中gcc的memcmp是怎么实现的。
结果发现,gcc库中实现的memcmp一次跳4个字节。突然就茅塞顿开。根据汇编代码实现我自己的memcmp。效率工具链中的memcmp效率基本一致。