1. 程式人生 > 其它 >記憶體函式的模擬實現

記憶體函式的模擬實現

技術標籤:學習記錄

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基礎上實現,但是解決了原記憶體塊和目標記憶體塊重疊的問題。

2.需要分為重疊和非重疊來討論。
模擬實現:

#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; //返回結果 }