内存拷贝程序的优化--利用系统的特性

/*********************************************************************
* Author : Samson
* Date : 07/04/2012
* Test platform:
* GNU Linux version 2.6.29.4
* gcc version 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC)

* *******************************************************************/

我们经常会自己实现写一些系统函数, 但是不一定是性能最优的,那么如何达到速度最快呢? 现就将附带例子进行关于利用硬件特性或叫系统特性来进行内存拷贝的程序的优化。


如下代码是没有优化的普通的性能的函数:

#include <stdlib.h>

#include <stdio.h>

void *_memcpy(void *dest, const void *src, size_t n)
{

char i;

char *Pdest = (char *)dest, *Psrc = (char *)src;
for(i = 0; i < n; i++)
{
*Pdest = *Psrc;
Pdest += 1;
Psrc += 1;
}
return dest;

}

int main()
{

char strname[20] = "samson.wen";
char strcountry[20] = "China";
_memcpy(strcountry, strname, 8);
printf ("strcountry now value is %s\n", strcountry);
return 0;

}

编译运行后的结果是:

[root@UFO testascii]# ./a.out
strcountry now value is samson.w

那么面对以上的程序如何来做优化呢? 就利用一下系统的字长来做做优化吧, 我所使用的系统的字长为32位,也就是说一条指令的最大长度,那么就专门针对size_t n这个参数能够被4整除的数来修改成如下:

void *_memcpy(void *dest, const void *src, size_t n)
{

char i;
int num = n / sizeof(int);

int *Pdest = (int *)dest, *Psrc = (int *)src;
for(i = 0; i < num; i++)
{
*Pdest = *Psrc;
Pdest += 1;
Psrc += 1;
}
return dest;

}

其中, i改为char型,可以节省三个字节, 然后在每次内存复制的时候是按字长(一般系统的int型的长度即是一个字长)来进行复制,这会大大节约系统调用的调用次数,相应的时间也就用的更少了,也就达到了优化的效果,这种效果尤其是在嵌入式系统中的时候。


你还有更好的优化方法吗??? 若有,还请不吝赐教。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值