重新實現memcpy

2021-08-28 02:58:15 字數 794 閱讀 3552

dst被移動了,返回的是移動後的dst,而且void指標不存在自增操作,所以顯然是錯誤的

void *memcpy1(void *dst, const void *src, unsigned int len)

將指標轉換成char型別的,那麼在複製資料的時候就是乙個位元組乙個位元組的進行

void *memcpy2(void *dst, const void *src, unsigned int len)

整塊的資料使用cpu位寬進行拷貝,剩餘部分使用字串進行拷貝

void *memcpy3(void *dst, const void *src, size_t len)

考慮到位址空間重疊的問題

1. 兩者的位址空間不重疊[dst > src + len 或者 src > dst + len],從前往後複製

2. 兩者的位址空間重疊,dst < src,從前往後複製

3. 兩者的位址空間重疊,dst > src, 從後往前複製

void *memcpy4(void *dst, const void *src, size_t len)

else if(dst > src)

else if(dst == src)

return (void *)dst;

}

int main()

return 0;

}

程式設計實現memcpy()

以下內容 面試中如問到memcpy的實現,那就要小心了,這裡有陷阱。先看下標準memcpy 的解釋 注意下面的注釋,對於位址重疊的情況,該函式的行為是未定義的。事實上所說的陷阱也在於此,自己動手實現memcpy 時就需要考慮位址重疊的情況。另外,標準庫也提供了位址重疊時的記憶體拷貝函式 memmov...

memcpy函式實現

1.原型 void memcpy void dest,const void src,size t size 標頭檔案 include 功能 由src所指記憶體區域複製size個位元組到dest所指記憶體區域。memcpy 時就需要考慮位址 重疊的情況。2.記憶體布局情況 1 源位址和目的位址不重疊 ...

memcpy 函式實現

memcpy函式的作用 將由src指向位址為起始位址的連續n個位元組的資料複製到以dest指向位址為起始位址的空間內,函式返回乙個指向dest的指標。想必大多數人在面試時被要求寫 memcpy的實現,很不幸,我也吃過這個虧 這種題要是寫的一塌糊塗後面完全沒戲 所以還是得提前準備一下,不然就只能呵呵了...