手撕記憶體操作函式
記憶體複製memcpy
#include<stdio.h>
#include<stdlib.h>
void* my_memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while(count--){
*tmp++ = *s++ ;
}
return dest;
}
int main()
{
char* buf1 = "abcdefghijklmnopqrstuvwxyz";
char* buf2 = malloc(27);
my_memcpy(buf2,buf1,27);
printf("buf1 = %s \r\n",buf1);
printf("buf2 = %s \r\n",buf2);
free(buf2);
return 0;
}
記憶體複製,改進memcpy
#include<stdio.h>
#include<stdlib.h>
void* my_memcpy(void *dest, const void *src, size_t count)
{
char *d;
const char *s;
if((dest > (src+count)) || (dest < src)){
d = dest;
s = src;
while (count--){
*d++ = *s++;
}
}else{ /* overlap */
d = (char *)(dest + count - 1); /* offset of pointer is from 0 */
s = (char *)(src + count -1);
while (count --){
*d-- = *s--;
}
}
return dest;
}
int main()
{
char* buf1 = "abcdefghijklmnopqrstuvwxyz";
char* buf2 = malloc(27);
my_memcpy(buf2,buf1,27);
printf("buf1 = %s \r\n",buf1);
printf("buf2 = %s \r\n",buf2);
free(buf2);
return 0;
}
記憶體設定memset
#include<stdio.h>
#include<stdlib.h>
void* my_memset(void *s,int c,size_t n)
{
const unsigned char uc = c;
unsigned char *su;
for(su = s;0 < n;++su,--n){
*su = uc;
}
return s;
}
int main()
{
char* buf1 = malloc(6);
my_memset(buf1,'1',5);
buf1[5] = '\0';
printf("buf1 = %s \r\n", buf1);
free(buf1);
char* buf2 = malloc(6);
my_memset(buf2,'8',5);
buf2[5] = '\0';
printf("buf2 = %s \r\n", buf2);
free(buf2);
return 0;
}
相關文章
- 手撕字串操作函式字串函式
- 常用記憶體操作函式記憶體函式
- 函式指標、回撥函式、動態記憶體分配、檔案操作函式指標記憶體
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- 虛擬函式的記憶體佈局(上)函式記憶體
- 優雅手撕bind函式(面試官常問)函式面試
- 如何高效記憶字串函式字串函式
- 胡扯JS系列-記憶體模型和函式執行JS記憶體模型函式
- 20201023_081.遞迴函式_函式呼叫記憶體分析_棧幀的建立遞迴函式記憶體
- 每日五個 PHP 函式記憶PHP函式
- 手撕正規表示式
- C語言-記憶體函式的實現(一)之memcpyC語言記憶體函式memcpy
- C語言-記憶體函式的實現(二)之memmoveC語言記憶體函式
- php實現共享記憶體程式通訊函式之_shmPHP記憶體函式
- [譯]安全的WebAssembly記憶體操作Web記憶體
- golang手動管理記憶體Golang記憶體
- 『手撕Vue-CLI』函式柯里化最佳化程式碼Vue函式
- 【Java基礎】函式引數為物件時的記憶體管理Java函式物件記憶體
- 避免使用不當pthread_create函式造成記憶體洩露thread函式記憶體洩露
- curl 中減少記憶體分配操作記憶體
- 手機記憶體都有哪些?宏旺半導體分享手機記憶體發展簡史記憶體
- C++手寫記憶體池C++記憶體
- 物件的生存期 記憶體 深度複製 複製建構函式 筆記物件記憶體函式筆記
- uboot i2c 操作函式記錄boot函式
- 造成記憶體洩漏的操作有哪些?記憶體
- C++原子操作與記憶體序 1C++記憶體
- 怎麼快速記憶系統陣列函式陣列函式
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- uniapp 雲開發省錢之調整函式執行記憶體大小APP函式記憶體
- C++ 解引用與函式基礎:記憶體地址、呼叫方法及宣告C++函式記憶體
- T-SQL——函式——字串操作函式SQL函式字串
- 段頁式記憶體管理(轉載)記憶體
- Python演算法題常用函式記憶清單Python演算法函式
- 記憶(快取)函式返回值:Python 實現快取函式Python
- 【記憶體管理】記憶體佈局記憶體
- 記憶體管理 記憶體管理概述記憶體
- T-SQL——函式——時間操作函式SQL函式
- cache操作函式 --20240310函式