一种效率提高的内存复制方法技术

技术编号:8323142 阅读:173 留言:0更新日期:2013-02-13 23:37
本发明专利技术公开了一种效率提高的内存复制方法:包括如下步骤:(1)判断count是否大于N,N>1;(2)若步骤(1)的判断为是,则按次序将连续的N个字节数据从s指针指向的地址复制到tmp指针指向的地址,count=count-N、s=s+N、tmp=tmp+N,返回步骤(1);(3)若步骤(1)的判断为否,则逐字节将数据从s指针指向的地址复制到tmp指针指向的地址。本发明专利技术提供的效率提高的内存复制方法,在复制大量数据块时,CPU平均复制每个字节所耗的时间大幅减少,同时不会频繁使用跳转指令,节省了CPU开销,提高了复制大块内存数据的效率。

【技术实现步骤摘要】

本专利技术涉及一种计算机系统开发方法,尤其涉及。
技术介绍
内存复制函数(memcpy函数)是计算机系统开发过程中最常用、也是最重要的库函数之一,memcpy函数的实现与平台有关,一般都要尽可能提高该函数的性能,其效率直接影响到计算机系统的性能。memcpy 函数的原型是 void*memcpy (void*dest, void*src, int count),该函数实现的功能是将以src指向地址为起始地址的连续count个字节数据复制到以dest指向地址为起始地址的空间内。以下是memcpy函数实现的一种典型方法void * memcpy(void * dest,const void *src,size_t count){char *tmp, *s;tmp = (char *)dest;s = (char*)src;while (count—)* Imp 十十=return dest;}由上可见,完成一个字节复制需要以下步骤(I)检查count是否为0,如果为O则函数返回,否则继续;(2)把src指针指向的地址中的数据复制到tmp指针指向的地址;(3) tmp 指针加 I;(4) src 指针加 I;(5) count 减 I ;(6)跳转到步骤(I)。通过分析发现,CPU复制一个字节需要经过多个指令周期,尤其是在有跳转指令的情况下,CPU指令流水线被频繁打断,极大的降低了 CPU执行效率。上述方法是memcpy函数实现的最简单方法之一,实际应用中可以通过判断dest地址和src地址是否为2字节对齐或4字节对齐,CPU可以通过一条指令复制2个字节或4个字节,这种方法只能针对特殊情况,且效率提高并不明显。
技术实现思路
专利技术目的为了克服现有技术中存在的不足,本专利技术提供,使CPU进行大块内存复制操作时大幅提高效率。技术方案为实现上述目的,本专利技术采用的技术方案为包括如下步骤(I)判断 count 是否大于 N,N > I ; (2)若步骤(I)的判断为是,则按次序将连续的N个字节数据从s指针指向的地址复制到tmp指针指向的地址,count=count_N、s=s+N、tmp=tmp+N,返回步骤(I);(3)若步骤(I)的判断为否,则逐字节将数据从s指针指向的地址复制到tmp指针指向的地址。优选的,N=16。由上述步骤可见,CPU复制大于等于16个字节数据的时候,首先判断count是否大于16 :若判断为是,则按次序将16个字节数据从s指针指向的地址复制到tmp指针指向的地址,最后将count减16、s加16,、tmp加16 ;若判断为否,则将小于等于16个字节数据按照通常的方法逐字节进行复制。综上所述,在复制大量数据块时,CPU平均复制每个字节所耗的时间大幅减少,同时不会频繁使用跳转指令;经测试,复制少量字节的性能略有降低(几乎可以忽略,因为只执行了一个判断语句),而复制大块内存数据时效率可提高50%以上,节省了 CPU开销,提高了复制大块内存数据的效率。有益效果本专利技术提供的效率提高的内存复制方法,在复制大量数据块时,CPU平均复制每个字节所耗的时间大幅减少,同时不会频繁使用跳转指令,节省了 CPU开销,提高了复制大块内存数据的效率。附图说明图I为本专利技术方法的流程图。具体实施例方式下面结合附图对本专利技术作更进一步的说明。如图I所示为包括如下步骤(I)判断count是否大于16 ;(2)若步骤(I)的判断为是,则按次序将连续的16个字节数据从s指针指向的地址复制到tmp指针指向的地址,count=count_16、s=s+16、tmp=tmp+16,返回步骤(I);(3)若步骤(I)的判断为否,则逐字节将数据从s指针指向的地址复制到tmp指针指向的地址。以下是根据上述方法给出的一种程序方案4void * memcpy(void * dest,const void *src,size_t count)ichar *tmp, *s; tmp = (char *)dest;s = (char*)src;for(;count>= 16;count-= 16){tmp = s;tmp[l] = s[l];tmpP] = s[2];tmp[3] = s[3];tmp[4] = s[4];tmp[5] = s[5];tmp[6] = s[6];tmp[7] = s[7];tmP[8] = s[8];tmp[9] = s[9];tmp[10] = s[10];tmp[ll] = s[ll];tmp[12]-s[12];tmp[13] = s[13];tmp[14] = s[14];tmp[15] = s[15];tmp 十=16;s+=16;}while (count—)return dest;j以上所述仅是本专利技术的优选实施方式,应当指出对于本
的普通技术人员来说,在不脱离本专利技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本专利技术的保护范围。本文档来自技高网
...

【技术保护点】
一种效率提高的内存复制方法:其特征在于:包括如下步骤:(1)判断count是否大于N,N>1;(2)若步骤(1)的判断为是,则按次序将连续的N个字节数据从s指针指向的地址复制到tmp指针指向的地址,count=count?N、s=s+N、tmp=tmp+N,返回步骤(1);(3)若步骤(1)的判断为否,则逐字节将数据从s指针指向的地址复制到tmp指针指向的地址。

【技术特征摘要】
1.一种效率提高的内存复制方法其特征在于包括如下步骤(1)判断count是否大于N,N > I ;(2)若步骤(I)的判断为是,则按次序将连续的N个字节数据从s指针指向的地址复制到 tmp 指针指向的地址,count=...

【专利技术属性】
技术研发人员:姚艳松郭立煌周建波雍太利朱学海陈靖公王程谦
申请(专利权)人:国电南京自动化股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1