memcpy函式的實現

2021-04-13 01:28:47 字數 828 閱讀 4099

前段時間去面試自己比較喜歡的乙個工作,面試的哥們讓我實現void *memcpy(void *to, const void *from, size_t count)這個函式。沒做出來,掛了。感到非常不爽。回來研究了一下。找著了幾個不同版的實現,貼出來。

首先對這個函式做一些說明。

#include

void *memcpy(void *to, const void *from, size_t count)

函式memcpy()從from指向的陣列向to指向的陣列複製count個字元。如果兩陣列重疊,不定義函式的行為。

在c99中,to和from由restrict修飾。

先來看看微軟的實現:

void * __cdecl memcpy (

void * dst,

const void * src,

size_t count

)#else  /* defined (_m_ia64) */

/** copy from lower addresses to higher addresses

*/while (count--)

#endif  /* defined (_m_ia64) */

return(ret);

}再來看看coreutils中的實現:

void *

memcpy(void *destaddr, void const *srcaddr, size_t len)

再來看linux中實現:

void *memcpy(void *dest, const void *src, size_t count)

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的實現,很不幸,我也吃過這個虧 這種題要是寫的一塌糊塗後面完全沒戲 所以還是得提前準備一下,不然就只能呵呵了...

memcpy的函式內部實現

memcpy和memmove函式的實現,需要注意memmove的覆蓋問題,還有指標型別需要考慮。下面的例子中,先給出了錯誤的例子,而後給出了正確的例子,引以為戒!區別 兩個函式都是進行n位元組記憶體內容的拷貝,入口引數和返回引數也都一樣,可是這兩個函式在內部實現上是有一定區別的,這主要是因為dest...