記憶體函式的模擬實現
阿新 • • 發佈:2021-01-19
技術標籤:學習記錄
1.模擬實現 memcpy函式
原函式:
void * memcpy ( void * destination, const void * source, size_t num );
注意:
1.void無法直接進行解引用。
2.需要返回結果以便進行下次的使用。*
模擬實現:
#include<stdio.h>
void* my_memcpy(void* dest, const void* sour, size_t num)
{
char* ch_dest = (char*)dest;
const char* ch_sour = (const char *)sour;
//void* 不能進行解引用,因此需要對其進行強制型別轉換。
for (size_t i = 0; i < num; i++)
{
ch_dest[i] = ch_sour[i];
}
return dest;
//返回copy後的值,使得可以使用此函式的結果進行下一次的copy
}
2.模擬實現memmove函式
原函式:
void * memmove ( void * destination, const void * source, size_t num );
注意:
1.memmove函式是在memcpy基礎上實現,但是解決了原記憶體塊和目標記憶體塊重疊的問題。
模擬實現:
#include<stdio.h>
void* my_memmove(void* dest, const void* sour, size_t num)
{
char* ch_dest = (char*)dest;
const char* ch_sour = (const char*)sour;
if (ch_sour<=ch_dest&&ch_dest<=ch_sour+num)
//這種情況原記憶體塊和目標記憶體塊重疊,因此需要從陣列的末尾從後向前複製,以避免重疊部分的字元被前面的字元覆蓋
{
for (size_t i = num-1; i >= 0; --i)
{
ch_dest[i] = ch_sour[i];
}
}
else
//其他情況按照正常順序複製
{
for (size_t i = 0; i >= num; i++)
{
ch_dest[i] = ch_sour[i];
}
}
return dest;
//返回結果
}