memcpy,memset內部函式實現

2021-08-19 20:21:21 字數 1153 閱讀 7249

#include

using namespace std;

/*memcpy函式用於資源記憶體(src指向的記憶體)拷貝到目標記憶體(desc指向的記憶體);拷貝的個數size

用法::(1)可以拷貝任何型別的物件,因為函式的引數型別是void* ,由於函式拷貝是乙個位元組乙個

位元組拷貝,實際操作是將void*強制轉換成了char*,這樣才能保證每一次加乙個指標

*///實現,未考慮記憶體重疊情況

void* memcpy1(void * desc, const void * src, size_t size)

unsigned char* desc1 = (unsigned char*)desc; //將void*轉成unsigned char*型別

unsigned char* src1 = (unsigned char*)src;   //將void*轉成unsigned char*型別

while (size-->0)

return desc;  

}//考慮記憶體重疊的情況

void* memcpy2(void* desc, const void * src, size_t size)

unsigned char* desc1 = (unsigned char*)desc;

unsigned char* src1 = (unsigned char*)src;

//當記憶體重疊時,從後往前複製

if(desc > src && desc1 < (src1 + size))//記憶體發生重疊

}else

}return desc;

}//memset內部實現memset(void*s,int ch,size_t n)

/*將s所指向的某一塊記憶體中的前n個位元組的內容全部設定為ch指定的ascii值,返回s*/

void * memset1(void * ptr, int value, size_t n)

char *s = (char*)ptr; //定義乙個指標來接str;輔助指標

while (n--)

return ptr;

void* memset(void* dst,int val, size_t count)

return ret;

}

memcpy memset 注意事項

深度探索c 物件模型 不管使用memcpy 還是memset 都只有在 classes不含任何由編譯器產生的內部members 時才能執行。如果這個類宣告乙個或者乙個以上的virtual function,或者內含乙個virtual base class,那麼使用這兩個函式將會導致那些 被編譯器產生...

WaitForSingleObject函式的使用

程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...

cvCreateVideoWriter函式使用

cvcreatevideowriter函式使用 2011 11 04 15 47 例如,cv fourcc p i m 1 是mpeg 1 codec,cv fourcc m j p g 是motion jpeg codec cv fourcc m p 4 2 mpeg 4.2 codec cv f...