memcpy,memmove的實現
1.memcpy()的實現
函式原型:
char *memcpy(void * destination,const void * source,size_t num)
- 記憶體拷貝函式,從source的位置開始向後拷貝num個位元組的資料到dest的記憶體位置。
- memcpy按位元組拷貝,並不是只能拷貝字串,所以沒有‘\0’結束標誌(遇到‘/0’不會停止),按指定是位元組數大小拷貝
- str家族函式只能處理字串型別的資料,而mem可以處理任意型別的資料
- 如果source和destination有任何重疊,複製的結果都是未定義的
void* my_memcpy(void * dest, void * src, size_t count)
{
assert(dest);
assert(src);
char* p = (char *)dest;
char* q = (char *)src;
while (count--)
{
*p = *q;
p++;
q++;
}
return dest;
}
//void變數 不能被定義,因為編譯器不知道它的大小,但是void*變數可以被定義出來,因為它是個指標,可以接受任意型別的指標
memcpy函式在拷貝的時候可能出現記憶體重疊問題,導致結果與預期的不一樣。此時就可以使用memmove()解決
memcpy從前向後拷貝,本來我們想要的結果是“hello worl”,但是它的第一個h拷過去以後,之後拷貝的都是h,如果用memmove拷貝他會從後向前拷貝從而解決記憶體重疊問題
2.memmove()的實現
函式原型:
voi * memmove(void * destination,const void * source,size_t num)
- 它也是記憶體拷貝函式,與memcpy的差別在於他可以解決記憶體重疊問題
- 如果原空間和目標空間出現重疊,就使用memmove函式處理
void* memmove(void *dest, void *src, size_t count)
{
void * ret = dest;
if (dest <= src || (char*)dest >= ((char*)src + count))
{
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else
{
dest = (char*)dest + count - 1;
src = (char*)src + count - 1;
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest - 1;
src = (char*)src - 1;
}
}
return(ret);
}
相關文章
- strcpy,strncpy,memcpy,memmove,memset函式memcpy函式
- [C++]實現memcpyC++memcpy
- C語言-記憶體函式的實現(二)之memmoveC語言記憶體函式
- C語言-記憶體函式的實現(一)之memcpyC語言記憶體函式memcpy
- memcpymemcpy
- strcpy函式和memcpy函式的區別函式memcpy
- C中memcpy使用注意事項memcpy
- C 標準庫 – string.h之memmove使用
- 關於使用向量指令集對memcpy最佳化的分析memcpy
- memcopy 導致的程式碼崩潰問題,memcpy的三大踩坑記memcpy
- 比memcpy還要快的記憶體複製,老哥瞭解一下?memcpy記憶體
- Blocks的實現BloC
- AutoreleasePool的實現
- Servlet的實現Servlet
- EventBus的實現
- ReactRouter的實現React
- Spring實現IOC容器的兩種實現方式Spring
- Python實現火柴人的設計與實現Python
- Rt-thread提供的printf實現(rt_vsnprintf的實現)thread
- 訊息的即時推送——net實現、websocket實現以及socket.io實現Web
- vue的nextTick的實現Vue
- 從零實現Vue的元件庫(十六)- Dropdown 實現Vue元件
- 從零實現Vue的元件庫(九)- InputNumber 實現Vue元件
- 從零實現Vue的元件庫(二)- Slider 實現Vue元件IDE
- 從零實現Vue的元件庫(一)- Toast 實現Vue元件AST
- 從零實現Vue的元件庫(十二)- Table 實現Vue元件
- 虛擬現實還需要多久才能真正的實現
- 從零實現Vue的元件庫(十四)- RadioGroup 實現Vue元件
- 從零實現Vue的元件庫(十三)- Pagination 實現Vue元件
- 從零實現Vue的元件庫(十)- Select 實現Vue元件
- 從零實現Vue的元件庫(八)- Input 實現Vue元件
- 從零實現Vue的元件庫(五)- Breadcrumb 實現Vue元件
- 好用的Middleware實現
- switch的python實現Python
- AT指令框架的實現框架
- 實現自己的promisePromise
- 三、棧的實現
- Category的實現原理Go