
memcpy和memmove()都是C語言中的庫函數,在頭文件string.h中,作用是拷貝一定長度的內存的內容,原型分別如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count); 他們的作用是一樣的,唯一的區別是,當內存發生局部重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確 。二者的c語言實現很簡單,有興趣的朋友可以去看看 。在實際情況下,這兩個函數都是用匯編實現的 。memmove在copy兩個有重疊區域的內存時可以保證copy的正確,而memcopy就不行了,但memcopy比memmove的速度要快一些,如:char s[] = "1234567890";char* p1 = s;char* p2 = s+2;memcpy(p2, p1, 5)與memmove(p2, p1, 5)的結果就可能是不同的,memmove()可以將p1的頭5個字符"12345"正確拷貝至p2,而memcpy()的結果就不一定正確了.和memcpy相比,src和des有重疊的情況下,memmove可以保證數據的完整性.memmove保證的原因很簡單,就是針對重疊的情況做特殊處理,因此速度會比memcpy慢一些具體的算法并不難想,畫個圖,分兩種情況 1. src的尾部和des的頭部重合 從src尾部開始,以地址 -- 的方式copy到des2. src的頭部和des的尾部重合 從src頭部開始,以地址 ++ 的方式copy到des
【memcpy和memmove的區別】
猜你喜歡
- 許愿精靈 安娜蘇的SecretWish香水,藍色的和粉色的有什么區別?
- 動車和普通火車哪一個快
- 農商銀行電話是955多少
- pdf打印和word打印的區別
- 小米機頂盒4c和4se的區別
- 創可貼會和傷口處的血肉粘在一起嗎?
- 萬和熱水器使用方法
- 巴氏奶和純牛奶營養一樣嗎?
- ISSR和EST-SSR標記在檢測中國、日本和肯尼亞茶樹品種遺傳多樣性上的比較分析
- 小繡球花的種植方法和注意事項
