zoukankan      html  css  js  c++  java
  • 模拟实现内存操作函数

    内存操作函数:
    头文件#include<string.h>

    1、memcopy
    函数原型:void *memcpy(void *dest, const void *src, size_t n);

    函数功能:从源src所指的内存地址的起始位置

    开始拷贝n个字节到目标dest所指的内存 地址的起始位置中。src和dest所指内存区域不能重叠。函数返回指向dest的指针。

    如果目标数组dest本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n个字节)。

    代码实现:

     1 void*my_memcopy(void*dest, const void*src, size_t size)
     2 {
     3     char*pdest = (char*)dest;
     4     const    char* psrc = (const char*)src;
     5         while (size--)
     6         {
     7             *pdest = *psrc;
     8             pdest++;
     9             psrc++;
    10         }
    11 
    12     return dest;
    13 }

    2、memmove
    函数原型:void *memmove( void* dest, const void* src,size_t size );
    函数功能:由src所指内存区域复制size个字节到dest所指内存区域。
    如果dest所指内存区域和src所指内存区域有重叠,
    memmove能够保证src所指内存区域的内容在被覆盖之前将重叠、
    区域的字节拷贝到dest所指内存区域中。
    当dest所指内存区域和src所指内存区域没有重叠,则和memcpy函数功能相同。

     memmove的拷贝分为以下几种情况:

    代码实现:

     1 void* my_memmove(void* dest, const void* src,size_t size)
     2 {
     3     char*pdest = (char*)dest;
     4   const    char* psrc = (const char*)src;
     5   if (pdest > psrc&&pdest < psrc + size)
     6   {
     7       while (size--) //从后往前进行拷贝
     8       {
     9           *(pdest + size) = *(psrc + size);
    10       }
    11 
    12   }
    13   else
    14   {
    15       while (size--) //从前往后进行拷贝
    16       {
    17           *pdest++ = *psrc++;
    18       }
    19   }
    20   return dest;
    21 }


    3.memset
    函数原型:void *memset(void *dest,int c,size_t size);
    函数功能 将dest所指内存区域前size个字节赋值为字符c。

    代码实现:

    1 void* my_memset(void* dest, int c, size_t size)
    2 {
    3     char* pdest = (char*)dest;
    4     while (size--)
    5     {
    6         *pdest++ = c;
    7     }
    8     return dest;
    9 }
  • 相关阅读:
    python自省函数getattr的用法
    python-mysqldb安装
    weblogic部署脚本
    netcat使用
    ssh批量互信脚本
    yum安装出错
    centos文件误删除恢复
    lamp php的ssl,ssh支持
    ssh免密码登陆
    python 学习笔记 四 条件, 循环以及其他
  • 原文地址:https://www.cnblogs.com/xmc2017/p/6282292.html
Copyright © 2011-2022 走看看