[發(fā)明專利]一種memcpy函數(shù)的優(yōu)化方法無效
| 申請(qǐng)?zhí)枺?/td> | 201310408259.5 | 申請(qǐng)日: | 2013-09-10 |
| 公開(公告)號(hào): | CN103473057A | 公開(公告)日: | 2013-12-25 |
| 發(fā)明(設(shè)計(jì))人: | 張福新;陳杰;王銳;吳少剛;張斌;晏華 | 申請(qǐng)(專利權(quán))人: | 江蘇中科夢(mèng)蘭電子科技有限公司 |
| 主分類號(hào): | G06F9/44 | 分類號(hào): | G06F9/44 |
| 代理公司: | 南京蘇高專利商標(biāo)事務(wù)所(普通合伙) 32204 | 代理人: | 柏尚春 |
| 地址: | 215500 江*** | 國(guó)省代碼: | 江蘇;32 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 memcpy 函數(shù) 優(yōu)化 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及一種拷貝函數(shù)的優(yōu)化方法,特別是涉及一種memcpy函數(shù)的優(yōu)化方法。
背景技術(shù)
Memcpy函數(shù)是C語言的標(biāo)準(zhǔn)函數(shù),也是經(jīng)常用的函數(shù),其作用將一份內(nèi)存中的數(shù)據(jù)復(fù)制到另一內(nèi)存位置。
現(xiàn)有優(yōu)化技術(shù)中,通過在memcpy函數(shù)的實(shí)現(xiàn)中使用高位寬的指令,例如使用一次復(fù)制8字節(jié)的指令替代一次復(fù)制4字節(jié)的指令,從而提高效率。
然而,高位寬的指令對(duì)地址的對(duì)齊有較高的要求。通常位寬為N的指令,對(duì)內(nèi)存地址的對(duì)齊要求也是N。當(dāng)memcpy函數(shù)的源地址/目的地址不滿足對(duì)齊要求時(shí),在不同的硬件平臺(tái)上,或是不能使用這些高位寬的指令、或是指令的效能出現(xiàn)大幅度下降。
發(fā)明內(nèi)容
針對(duì)上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的是提供一種memcpy函數(shù)的優(yōu)化方法,盡可能源地址/目的地址達(dá)到高位寬對(duì)齊,從而使用高位寬讀寫指令完成拷貝任務(wù),提升memcpy函數(shù)效率。
本發(fā)明的技術(shù)方案是這樣的:一種memcpy函數(shù)的優(yōu)化方法,其特征在于,包括以下步驟:
1)通過單字節(jié)拷貝指令拷貝len長(zhǎng)度的待拷貝數(shù)據(jù),使源地址/目的地址中至少一個(gè)滿足N字節(jié)對(duì)齊,所述N為系統(tǒng)中位寬最高的指令一次能處理的字節(jié)個(gè)數(shù),即拷貝后源地址/目的地址滿足(x,N)或者(N,x)對(duì)齊,x為1,2,...,N;
2)對(duì)于(x,N)對(duì)齊,以x字節(jié)指令從源地址讀取數(shù)據(jù)存入寄存器,再由N字節(jié)指令從寄存器讀取數(shù)據(jù)存入目的地址,剩余待拷貝數(shù)據(jù)不足N字節(jié)時(shí)由單字節(jié)指令進(jìn)行拷貝;對(duì)于(N,x)對(duì)齊,以N字節(jié)指令從源地址讀取數(shù)據(jù)存入寄存器,再由x字節(jié)指令從寄存器讀取數(shù)據(jù)存入目的地址,剩余待拷貝數(shù)據(jù)不足N字節(jié)時(shí)由單字節(jié)指令進(jìn)行拷貝。
在本發(fā)明的一個(gè)具體實(shí)施例中,所述len為源地址/目的地址除于N所得較大余數(shù)與N之間的差值。
在本發(fā)明的另一個(gè)具體實(shí)施例中,所述步驟1)之前判斷待拷貝數(shù)據(jù)長(zhǎng)度是否大于效率臨界值,待拷貝數(shù)據(jù)長(zhǎng)度大于效率臨界值時(shí),進(jìn)入步驟1);待拷貝數(shù)據(jù)長(zhǎng)度小于等于效率臨界值時(shí),由單字節(jié)拷貝指令完成拷貝。
本發(fā)明所提供的技術(shù)方案,針對(duì)源地址/目的地址較差的對(duì)齊情況,通過對(duì)源地址/目的地址對(duì)齊情況的“升級(jí)”,使用盡可能高的位寬指令進(jìn)行讀寫來完成拷貝,相比原對(duì)齊狀況下使用受限指令的拷貝提升了拷貝效率,減少了拷貝延時(shí),增強(qiáng)系統(tǒng)性能。通過判斷待拷貝數(shù)據(jù)長(zhǎng)度是否超過效率臨界值,確定由優(yōu)化指令拷貝還是由單字節(jié)拷貝指令,避免由于待拷貝數(shù)據(jù)長(zhǎng)度過短,造成優(yōu)化指令本身的效率損失無法通過整個(gè)拷貝過程效率的提升所彌補(bǔ)而使得優(yōu)化失敗,提升優(yōu)化指令的適用性。
附圖說明
圖1為本發(fā)明memcpy函數(shù)優(yōu)化后數(shù)據(jù)處理流程示意圖。
具體實(shí)施方式
下面結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明,但不作為對(duì)本發(fā)明的限定。
請(qǐng)參見圖1,首先對(duì)memcpy函數(shù)的參數(shù)說明:memcpy(dst,src,size),從內(nèi)存地址src(源地址)開始,復(fù)制size個(gè)字節(jié)到內(nèi)存地址dst(目標(biāo)地址)。其中,如果src/dst整除4,則稱為源地址/目標(biāo)地址為4字節(jié)對(duì)齊,如果src/dst整除8,則稱為源地址/目標(biāo)地址為8字節(jié)對(duì)齊,依次類推。
現(xiàn)假設(shè)目前系統(tǒng)中位寬最高的指令一次能處理N個(gè)字節(jié),如果src/dst均是N字節(jié)對(duì)齊的,則效能最高。本發(fā)明的優(yōu)化主要針對(duì)src/dst不滿足N字節(jié)對(duì)齊的情況,先以單字節(jié)拷貝指令進(jìn)行少量字節(jié)拷貝,使得拷貝后,src/dst的對(duì)齊狀況盡可能地“升級(jí)”。例如N=16,在src=15、dst=31情況下,兩地址均為非16字節(jié)對(duì)齊,進(jìn)行單字節(jié)拷貝效率較低。在這里,我們先完成一個(gè)字節(jié)的拷貝,使得src=16,dst=32,此時(shí)兩者都是16字節(jié)對(duì)齊,可以使用16字節(jié)位寬指令來進(jìn)行操作,以此提高效率。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于江蘇中科夢(mèng)蘭電子科技有限公司,未經(jīng)江蘇中科夢(mèng)蘭電子科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310408259.5/2.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 一種數(shù)據(jù)庫(kù)讀寫分離的方法和裝置
- 一種手機(jī)動(dòng)漫人物及背景創(chuàng)作方法
- 一種通訊綜合測(cè)試終端的測(cè)試方法
- 一種服裝用人體測(cè)量基準(zhǔn)點(diǎn)的獲取方法
- 系統(tǒng)升級(jí)方法及裝置
- 用于虛擬和接口方法調(diào)用的裝置和方法
- 線程狀態(tài)監(jiān)控方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)
- 一種JAVA智能卡及其虛擬機(jī)組件優(yōu)化方法
- 檢測(cè)程序中方法耗時(shí)的方法、裝置及存儲(chǔ)介質(zhì)
- 函數(shù)的執(zhí)行方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)





