亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中memcpy和memmove的區別總結

2020-01-26 15:15:23
字體:
來源:轉載
供稿:網友

變態的命名

我們在寫程序時,一般講究見到變量的命名,就能讓別人基本知道該變量的含義。memcpy內存拷貝,沒有問題;memmove,內存移動?錯,如果這樣理解的話,那么這篇文章你就必須要好好看看了,memmove還是內存拷貝。那么既然memcpy和memmove二者都是內存拷貝,那二者究竟有什么區別呢?

先說memcpy

你有沒有好好的參加過一場C++筆試。讓你寫出memcpy的實現,這是多么常見的筆試題啊?,F在,拿起你的演算紙和筆;是的,是筆和紙,不是讓你在你的IDE上寫。寫不出來?看下面吧:

復制代碼 代碼如下:

void *mymemcpy(void *dest, const void *src, size_t count)
{
    assert(dest != NULL || src != NULL);
   
    char *tmp = (char *)dest;
    char *p = (char *)src;
 
    while (count--)
    {
        *tmp++ = *p++;
    }
    return dest;
}

memcpy的實現很簡單,一般在筆試時,出現寫源碼的題目,無非就是需要注意以下幾點:

1.確定函數原型;
2.判斷參數合法性;
3.邏輯實現(考慮各種情況,統稱邏輯實現);
4.錯誤處理。

當然了,我的這個沒有錯誤處理,也不需要錯誤處理。上面,我寫出了memcpy的實現源碼,實現原理如下圖所示:

這樣下去,上面的代碼會運行的很好,如果出現下面的情況呢?

i、n、k的內存和J、e、l的內存地址重合了,現在再使用上面的代碼進行copy時,會出現什么問題呢?你有沒有想過這個問題。如果沒有,那就現在想想,不急著閱讀下面的內容。

然后,我再留一個問題,上面的代碼中,為什么都需要將void *轉換成char *呢?比如:

復制代碼 代碼如下:

char *tmp = (char *)dest;

可以留言回答哦。

再說memmove

memmove也是用來實現內存的直接拷貝的。說起這個命名,我個人覺的多少還是有點坑的。既然memmove也是用來內存數據移動的,那就先來看看memmove的實現源碼。

復制代碼 代碼如下:

void *mymemmove(void *dest, const void *src, size_t count)
{
    assert(dest != NULL || src != NULL)
 
    if (dst < src)
    {
        char *p = (char *)dest;
        char *q = (char *)src;
        while (count--)
        {
            *p++ = *q++;
        }
    }
    else
    {
        char *p = (char *)dest + count;
        char *q = (char *)src + count;
        while (count--)
        {
            *--p = *--q;
        }
    }
 
    return dest;
}

從源碼看,memmove的確比memcpy復雜一些;再仔細一看,多了些什么?哦,多了一個else分支,而正是這個else分支,就處理了當src和dest的內存重合的問題。

memcpy和memmove的比較

從實現源碼中的確能看出一些貓膩,當出現了src和dest的內存有重合的時機時,memmove的處理規則是從后往前進行copy。當然了,重合的問題,需要考慮的以下兩種場合。

如圖所示,當出現(1)對應的情況時,就需要先從src的頭部開始復制;也就是memmove源碼中的if分支,這部分源碼和memcpy的實現是一致的;當出現(2)對應的情況時,就需要先從src的尾部開始復制,防止出現了覆蓋現象。這就是memmove比memcpy多的一個考慮點,所以說,在實際使用時,使用memmove是比memcpy更安全的。

總結

總結到了這里,我覺的我已經把問題說清楚了。你說呢?如果你還有什么好的想法,歡迎你和我分享。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品入口夜色视频大尺度| 国产精品久久一| 国产狼人综合免费视频| 欧美在线亚洲一区| www.日韩av.com| 国产精品青青在线观看爽香蕉| 精品性高朝久久久久久久| 欧美午夜精品伦理| 亚洲精品美女免费| 日韩精品在线影院| 欧美午夜精品久久久久久人妖| 中文字幕国产精品| 米奇精品一区二区三区在线观看| 国产成人精品视频在线| 国产一区二区日韩| 欧美激情精品久久久久久黑人| 久久久免费观看| 亚洲精品国产成人| 精品欧美激情精品一区| 欧美大全免费观看电视剧大泉洋| 亚洲精品国产品国语在线| 色综合久综合久久综合久鬼88| 亚洲人成绝费网站色www| 精品丝袜一区二区三区| 国产精品高清在线观看| 中文字幕av一区二区三区谷原希美| 欧美日韩一区二区三区| 97在线看福利| 韩剧1988免费观看全集| 亚洲日本欧美日韩高观看| 欧美午夜影院在线视频| 久久久久久久久久久人体| 国产精品视频公开费视频| 国产成人中文字幕| 久久亚洲春色中文字幕| 亚洲国产精品一区二区三区| 午夜精品三级视频福利| 97视频在线观看免费高清完整版在线观看| 欧美日韩国产在线| 中文字幕精品一区久久久久| 国产福利精品视频| 91精品国产91久久久久久| 亚洲免费电影在线观看| 欧美视频免费在线| 国产成人aa精品一区在线播放| 成人黄色在线免费| 久久久久这里只有精品| 成人激情黄色网| 最近中文字幕mv在线一区二区三区四区| 久久中国妇女中文字幕| 国产欧美日韩视频| 亚洲激情第一页| 国产精品男女猛烈高潮激情| 亚洲国产成人精品久久久国产成人一区| 欧美性20hd另类| 久久久久久久久久久人体| 欧美激情va永久在线播放| 亚洲网在线观看| 精品视频久久久久久久| 红桃视频成人在线观看| 国产精品99久久久久久www| 日韩精品极品视频| 日韩免费在线视频| 国产精品无码专区在线观看| 神马久久久久久| 成人福利在线视频| 国产成+人+综合+亚洲欧美丁香花| 亚洲欧美日韩国产中文专区| 高清欧美电影在线| 国产97在线|亚洲| 国产精品欧美日韩久久| 91精品一区二区| 亚洲一区亚洲二区| 久久精品久久久久久| 亚洲日本欧美中文幕| 欧美超级免费视 在线| 亚洲韩国欧洲国产日产av| 欧美亚洲另类激情另类| 久久视频国产精品免费视频在线| 日韩欧美aⅴ综合网站发布| 91av在线免费观看| 中文字幕视频在线免费欧美日韩综合在线看| 欧美日韩一区二区免费在线观看| 精品成人久久av| 亚洲欧美激情另类校园| 久久久久久久影院| 中文一区二区视频| 欧美大片在线影院| 伊人伊成久久人综合网小说| 97超级碰碰碰| 久久影视电视剧凤归四时歌| 精品无人区太爽高潮在线播放| 亚洲精品99999| xvideos国产精品| 久热国产精品视频| 亚洲一区二区三区久久| 成人免费福利在线| 欧美精品18videos性欧美| 日韩中文字幕欧美| 亚洲成色777777女色窝| 亚洲综合中文字幕在线观看| 久久久精品一区二区| 亚洲综合一区二区不卡| 97在线视频国产| 亚洲欧美在线播放| 欧美在线一级视频| 俺去亚洲欧洲欧美日韩| 亚洲第一中文字幕| 久久亚洲成人精品| 91亚洲午夜在线| 97国产在线观看| 国产亚洲日本欧美韩国| 欧美不卡视频一区发布| 欧美激情中文字幕在线| 97超级碰在线看视频免费在线看| 国产欧美最新羞羞视频在线观看| 欧美在线观看一区二区三区| 久久久精品一区| 欧美激情一二三| 久久综合久久八八| 成人激情视频在线播放| 亚洲一区二区三区在线免费观看| 国产精品爱啪在线线免费观看| 亚洲激情久久久| 九九久久国产精品| 欧美精品videosex极品1| 91高潮在线观看| 91精品视频在线| 亚洲白拍色综合图区| 91精品国产91久久久久久不卡| 久久久久成人网| 97在线精品视频| 国产亚洲精品美女| 欧美视频在线免费看| 国产精品欧美久久久| 欧美国产精品人人做人人爱| 国产精品久久久久久影视| 日韩av在线高清| 日本午夜精品理论片a级appf发布| 亚洲另类图片色| 欧美激情视频三区| 国产精品狼人色视频一区| 亚洲第一福利网站| 色综合色综合网色综合| 久久综合免费视频| 亚洲高清一二三区| 亚洲图中文字幕| 欧洲成人午夜免费大片| 午夜精品视频网站| 欧美国产精品日韩| 国产精品极品尤物在线观看| 色偷偷噜噜噜亚洲男人| 97色在线观看免费视频| 欧美性生交xxxxxdddd| 日韩av在线播放资源| 红桃av永久久久| 日韩精品www| 欧美一级视频免费在线观看| 精品久久久久久久久国产字幕| 91在线观看免费高清完整版在线观看| 91精品久久久久久久久久久久久久| 日本19禁啪啪免费观看www| 亚洲国产精品成人va在线观看| 国产精品青青在线观看爽香蕉|