久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 數(shu)據拷貝的方法解析

數據拷(kao)貝的方法解析 時間(jian):2018-09-27 ;     來源:未知

memcpy 與(yu) memmove

區別(bie):兩(liang)個函數都(dou)是(shi)(shi)進行n字(zi)節內(nei)存內(nei)容的拷貝,入口(kou)參數和返回(hui)參數也都(dou)一(yi)樣,可(ke)是(shi)(shi)這(zhe)兩(liang)個函數在內(nei)部實現上(shang)是(shi)(shi)有(you)一(yi)定(ding)區別(bie)的,這(zhe)主要是(shi)(shi)因為dest內(nei)存區域和src內(nei)存區域可(ke)能有(you)一(yi)下四種不同的情況,

注意count的影響:

從圖中可(ke)以(yi)看(kan)出,src的(de)內(nei)存區域和(he)dest的(de)內(nei)存區域相對位置(zhi)和(he)重(zhong)疊關系(xi)有四種情(qing)(qing)況,memcpy沒有考慮(lv)重(zhong)疊的(de)情(qing)(qing)況,而memmove考慮(lv)到了全部(bu)情(qing)(qing)況,因此memcpy函數的(de)時(shi)候(hou)可(ke)能(neng)出現意向不到的(de)結果(guo)。

這兩個函數的實現(xian):

***********下面兩個是錯誤的實(shi)現**************

void* memcpy(void* dest, void* source, size_t count) {

void* ret = dest;

//copy from lower address to higher address

while (count--)

*dest++ = *source++; //不(bu)知道兩(liang)個指(zhi)針的類型,不(bu)可以這樣(yang)自(zi)加。

return ret;

}

=======================================================================

void* memmove(void* dest, void* source, size_t count) {

void* ret = dest;

if (dest <;= source || dest >= (source + count)) {

//Non-Overlapping Buffers

//copy from lower addresses to higher addresses

while (count --)

*dest++ = *source++;

} else{

//Overlapping Buffers

//copy from higher addresses to lower addresses

dest += count - 1;

source += count - 1;

while (count--)

*dest-- = *source--; // 情況同上

}

return ret;

}

***********************正確的如(ru)下(xia)**************************

void* mymemcpy(void* dest, void* source, size_t count) {

char *ret = (char *)dest; char *dest_t = ret;

char *source_t = (char *)source;

while (count--){

 

*dest_t++ = *source_t++; }

 

return ret;

}

void *my_memmove(void *dst,const void *src,int count) {

char *ret;

char *dst_t;

char *src_t;

ret = (char *)dst;

if ((unsigned char*)

dst <= (unsigned char*)src || (unsigned char *)dst >= ((unsigned char *)src + count))

{

dst_t = (char *)dst;

src_t = (char *)src;

while (count--)

{

*dst_t++ = *src_t++;

}

}else{

dst_t = (char *)dst + count - 1;

src_t = (char *)src + count - 1;

while (count--)

{

*dst_t-- = *src_t--;

}

}

return(ret); }

上一篇:屬性動畫

下一篇:Android中Java與web通信

熱(re)點文章推薦(jian)
華清學(xue)員(yuan)就業榜單
高薪學員經驗分享
熱點(dian)新聞推薦
前臺專線:010-82525158 企業(ye)培訓洽(qia)談(tan)專(zhuan)線:010-82525379 院校合作洽談(tan)專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部