欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種效率提高的內(nèi)存復(fù)制方法

文檔序號(hào):6378932閱讀:620來源:國知局
專利名稱:一種效率提高的內(nèi)存復(fù)制方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種計(jì)算機(jī)系統(tǒng)開發(fā)方法,尤其涉及一種效率提高的內(nèi)存復(fù)制方法。
背景技術(shù)
內(nèi)存復(fù)制函數(shù)(memcpy函數(shù))是計(jì)算機(jī)系統(tǒng)開發(fā)過程中最常用、也是最重要的庫函數(shù)之一,memcpy函數(shù)的實(shí)現(xiàn)與平臺(tái)有關(guān),一般都要盡可能提高該函數(shù)的性能,其效率直接影響到計(jì)算機(jī)系統(tǒng)的性能。memcpy 函數(shù)的原型是 void*memcpy (void*dest, void*src, int count),該函數(shù)實(shí)現(xiàn)的功能是將以src指向地址為起始地址的連續(xù)count個(gè)字節(jié)數(shù)據(jù)復(fù)制到以dest指向地址為起始地址的空間內(nèi)。以下是memcpy函數(shù)實(shí)現(xiàn)的一種典型方法
void * memcpy(void * dest,const void *src,size_t count)
{
char *tmp, *s;tmp = (char *)dest;s = (char*)src;while (count—)
* Imp 十十=
return dest;
}由上可見,完成一個(gè)字節(jié)復(fù)制需要以下步驟(I)檢查count是否為0,如果為O則函數(shù)返回,否則繼續(xù);(2)把src指針指向的地址中的數(shù)據(jù)復(fù)制到tmp指針指向的地址;(3) tmp 指針加 I;(4) src 指針加 I;(5) count 減 I ;(6)跳轉(zhuǎn)到步驟(I)。通過分析發(fā)現(xiàn),CPU復(fù)制一個(gè)字節(jié)需要經(jīng)過多個(gè)指令周期,尤其是在有跳轉(zhuǎn)指令的情況下,CPU指令流水線被頻繁打斷,極大的降低了 CPU執(zhí)行效率。上述方法是memcpy函數(shù)實(shí)現(xiàn)的最簡(jiǎn)單方法之一,實(shí)際應(yīng)用中可以通過判斷dest地址和src地址是否為2字節(jié)對(duì)齊或4字節(jié)對(duì)齊,CPU可以通過一條指令復(fù)制2個(gè)字節(jié)或4個(gè)字節(jié),這種方法只能針對(duì)特殊情況,且效率提高并不明顯。

發(fā)明內(nèi)容
發(fā)明目的為了克服現(xiàn)有技術(shù)中存在的不足,本發(fā)明提供一種效率提高的內(nèi)存復(fù)制方法,使CPU進(jìn)行大塊內(nèi)存復(fù)制操作時(shí)大幅提高效率。
技術(shù)方案為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案為一種效率提高的內(nèi)存復(fù)制方法包括如下步驟(I)判斷 count 是否大于 N,N > I ;
(2)若步驟(I)的判斷為是,則按次序?qū)⑦B續(xù)的N個(gè)字節(jié)數(shù)據(jù)從s指針指向的地址復(fù)制到tmp指針指向的地址,count=count_N、s=s+N、tmp=tmp+N,返回步驟(I);(3)若步驟(I)的判斷為否,則逐字節(jié)將數(shù)據(jù)從s指針指向的地址復(fù)制到tmp指針指向的地址。優(yōu)選的,N=16。由上述步驟可見,CPU復(fù)制大于等于16個(gè)字節(jié)數(shù)據(jù)的時(shí)候,首先判斷count是否大于16 :若判斷為是,則按次序?qū)?6個(gè)字節(jié)數(shù)據(jù)從s指針指向的地址復(fù)制到tmp指針指向的地址,最后將count減16、s加16,、tmp加16 ;若判斷為否,則將小于等于16個(gè)字節(jié)數(shù)據(jù)按照通常的方法逐字節(jié)進(jìn)行復(fù)制。綜上所述,在復(fù)制大量數(shù)據(jù)塊時(shí),CPU平均復(fù)制每個(gè)字節(jié)所耗的時(shí)間大幅減少,同時(shí)不會(huì)頻繁使用跳轉(zhuǎn)指令;經(jīng)測(cè)試,復(fù)制少量字節(jié)的性能略有降低(幾乎可以忽略,因?yàn)橹粓?zhí)行了一個(gè)判斷語句),而復(fù)制大塊內(nèi)存數(shù)據(jù)時(shí)效率可提高50%以上,節(jié)省了 CPU開銷,提高了復(fù)制大塊內(nèi)存數(shù)據(jù)的效率。有益效果本發(fā)明提供的效率提高的內(nèi)存復(fù)制方法,在復(fù)制大量數(shù)據(jù)塊時(shí),CPU平均復(fù)制每個(gè)字節(jié)所耗的時(shí)間大幅減少,同時(shí)不會(huì)頻繁使用跳轉(zhuǎn)指令,節(jié)省了 CPU開銷,提高了復(fù)制大塊內(nèi)存數(shù)據(jù)的效率。


圖I為本發(fā)明方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明作更進(jìn)一步的說明。如圖I所示為一種效率提高的內(nèi)存復(fù)制方法包括如下步驟(I)判斷count是否大于16 ;(2)若步驟(I)的判斷為是,則按次序?qū)⑦B續(xù)的16個(gè)字節(jié)數(shù)據(jù)從s指針指向的地址復(fù)制到tmp指針指向的地址,count=count_16、s=s+16、tmp=tmp+16,返回步驟(I);(3)若步驟(I)的判斷為否,則逐字節(jié)將數(shù)據(jù)從s指針指向的地址復(fù)制到tmp指針指向的地址。以下是根據(jù)上述方法給出的一種程序方案
4void * memcpy(void * dest,const void *src,size_t count)
i
char *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以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種效率提高的內(nèi)存復(fù)制方法其特征在于包括如下步驟(1)判斷count是否大于N,N > I ;(2)若步驟(I)的判斷為是,則按次序?qū)⑦B續(xù)的N個(gè)字節(jié)數(shù)據(jù)從s指針指向的地址復(fù)制到 tmp 指針指向的地址,count=count_N、s=s+N、tmp=tmp+N,返回步驟(I);(3)若步驟(I)的判斷為否,則逐字節(jié)將數(shù)據(jù)從s指針指向的地址復(fù)制到tmp指針指向的地址。
2.根據(jù)權(quán)利要求I所述的效率提高的內(nèi)存復(fù)制方法其特征在于所述N=16。
全文摘要
本發(fā)明公開了一種效率提高的內(nèi)存復(fù)制方法包括如下步驟(1)判斷count是否大于N,N>1;(2)若步驟(1)的判斷為是,則按次序?qū)⑦B續(xù)的N個(gè)字節(jié)數(shù)據(jù)從s指針指向的地址復(fù)制到tmp指針指向的地址,count=count-N、s=s+N、tmp=tmp+N,返回步驟(1);(3)若步驟(1)的判斷為否,則逐字節(jié)將數(shù)據(jù)從s指針指向的地址復(fù)制到tmp指針指向的地址。本發(fā)明提供的效率提高的內(nèi)存復(fù)制方法,在復(fù)制大量數(shù)據(jù)塊時(shí),CPU平均復(fù)制每個(gè)字節(jié)所耗的時(shí)間大幅減少,同時(shí)不會(huì)頻繁使用跳轉(zhuǎn)指令,節(jié)省了CPU開銷,提高了復(fù)制大塊內(nèi)存數(shù)據(jù)的效率。
文檔編號(hào)G06F9/30GK102929579SQ20121039387
公開日2013年2月13日 申請(qǐng)日期2012年10月16日 優(yōu)先權(quán)日2012年10月16日
發(fā)明者姚艷松, 郭立煌, 周建波, 雍太利, 朱學(xué)海, 陳靖公, 王程謙 申請(qǐng)人:國電南京自動(dòng)化股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
铜梁县| 西安市| 正阳县| 榆林市| 周至县| 大庆市| 达日县| 中西区| 太仆寺旗| 五家渠市| 灵丘县| 荆州市| 四平市| 巴林右旗| 秀山| 抚顺县| 灵山县| 南汇区| 安多县| 如东县| 嘉荫县| 谢通门县| 响水县| 沈阳市| 会东县| 建宁县| 瑞昌市| 丽江市| 郑州市| 闽清县| 湖口县| 富民县| 兰考县| 尼玛县| 浮梁县| 瓮安县| 镇雄县| 耒阳市| 米脂县| 栖霞市| 徐汇区|