內(nèi)存移動
void *memmove(void *str1, const void *str2, size_t n)
str1 -- 這是指針數(shù)組屡律,其中的內(nèi)容將被復(fù)制到目標(biāo),類型強制轉(zhuǎn)換為void類型的指針。
str2 -- 這是要復(fù)制的數(shù)據(jù)源的指針,void類型的指針型鑄造市框。
n -- 這是要被復(fù)制的字節(jié)數(shù)。
這個函數(shù)返回一個指針到目的地糕韧,str1枫振。
內(nèi)存拷貝
void *memcpy(void *str1, const void *str2, size_t n)
str1 -- 這是指針數(shù)組,其中的內(nèi)容將被復(fù)制到目標(biāo)萤彩,類型強制轉(zhuǎn)換為void類型的指針粪滤。
str2 -- 這是要復(fù)制的數(shù)據(jù)源的指針,void類型的指針型鑄造雀扶。
n -- 這是要被復(fù)制的字節(jié)數(shù)杖小。
這個函數(shù)返回一個指針到目的地,str1愚墓。
兩者的作用是一樣的予权,唯一的區(qū)別是:當(dāng)
內(nèi)存發(fā)生局部重疊
的時候,
memmove保證拷貝的結(jié)果是正確的浪册,
memcpy不保證拷貝的結(jié)果的正確扫腺。
參考兩者的對比
為什么不用memmove替換掉memcpy
memmove 比memcpy 性能上稍微慢點
<1> memcpy
一個一個拷貝, 如果將3村象,4拷貝到1笆环,2位置,先講過3拷貝到1厚者,然后將4拷貝到2咧织。
如果將3,4拷貝到4籍救,1位置,那么還會將3拷貝到4渠抹,這個時候4的位置是3了蝙昙,會將原來4的位置的3的值拷貝到1的位置[出現(xiàn)問題]
闪萄。
<2>memmove
會先判斷方向,然后再去進(jìn)行拷貝奇颠,3败去,4拷貝到4,1的位置烈拒,會先判斷方向圆裕,然后從后面開始拷貝。【沒問題】