资讯专栏INFORMATION COLUMN

内存函数实现和详解

alin / 1567人阅读

摘要:注重点介绍函数。发现不能拷贝部分重叠内存情况但是,在编译器中,库函数和的功能一样强大,所以用编译器就会导致两个结果一样黑体然而其他的编译器不一定会让变得这样强大。若是改变成其他大的类型容易造成内存的浪费。

⚠️注:重点介绍 memcpy ,memmove 函数。

话不多说,正文开始​?

memcpy 与 memmove函数

传参和返回



观察发现,这两个函数的参数和返回类型一样,是否会觉得这两个函数有什么联系呢?
请看下文

memmove 函数实现

void* my_memmove(void* dest,const void* src, size_t count){	assert(dest && src);	int  i = 0;	if(dest > src)//dest指向位置比src指向位置靠后		while (count--)//从后往前拷贝		{			*((char*)dest + count) = *((char*)src + count);		}	else	{		while (i != count)//从前往后拷贝		{			*((char*)dest + i) = *((char*)src + i);			i++;		}	}	return (char*)dest;}

memcpy 函数实现

void* my_memcpy(void* dest, const void* src, size_t count){	assert(src && dest);	while (count--)	{		*((char*)dest + count) = *((char*)src + count);	}	return dest;}

运行结果

这里可以看到其实两种函数的结果并不一样。,发现strcpy不能拷贝部分 重叠内存 情况
但是,在VS2019编译器中,库函数 memcpymemmove 的功能一样强大,所以用VS编译器就会导致两个结果一样,然而其他的编译器不一定会让 memcpy 变得这样强大。

void* 为什么要强制类型转化为 char* ?

  • 首先void*类型的变量是不能被赋值的
  • 其次转化为char* 可以精确改变每个字节的内存(因为char是一个字节,类型改变的是指针的步长)。从而达到改变一个整型。
  • 若是改变成其他大的类型容易造成内存的浪费。而且可以兼容所有类型的内存的改变。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121536.html

相关文章

  • 详解js闭包

    摘要:但闭包的情况不同嵌套函数的闭包执行后,,然后还在被回收闭包会使变量始终保存在内存中,如果不当使用会增大内存消耗。每个函数,不论多深,都可以认为是全局的子作用域,可以理解为闭包。 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会...

    Chiclaim 评论0 收藏0
  • C语言-常用内存函数详解+模拟实现

    前言:博主之前有已经写过了C语言常用字符函数详解+模拟实现,感兴趣的同学可以去围观一下哦! 目录 前言: 1.内存函数 memcpy()  memmove() memcmp() memset() 2.错误信息报告函数 strerror()  perror() 1.内存函数 memcpy() 作用:内存拷贝 函数原型: 注意:count:要拷贝的字节数 函数memcpy从src位置开始向后赋值c...

    cucumber 评论0 收藏0
  • Javascript 闭包详解

    摘要:一般函数执行完毕,局部活动对象就会被销毁,内存中仅仅保存全局作用域,但是闭包会长期驻扎在内存。我只是想通过这两个例子来说明闭包的用处和好处。闭包会使变量始终保存在内存中,如果使用不当会增大内存消耗。 闭包特性 函数嵌套函数 函数内部可以引用外部的参数和变量 参数和变量不会被垃圾回收机制回收 闭包的作用 具体作用是有权访问函数内部的变量,最常见的就是函数内部创建另一个函数,通过另一个函数...

    ztyzz 评论0 收藏0
  • ES5的原型链ES6的类实现详解

    摘要:类才支持实例属性代码解读上面暂时只是概念性的写法,事实上,的类只是一个原型链的语法糖而已,主要是从写法上更接近于面相对象的类而已,另外一个作用就是区分的构造函数和函数之间的区分。 ES5的原型链和ES6的类实现详解 JavaScript最初设计时受到了面相对象编程的影响,从而引入了new关键字,来实例化对象。而在ES5中new后面跟着的是构造函数(也是函数),而到了ES6则改成了cla...

    王伟廷 评论0 收藏0
  • ES5的原型链ES6的类实现详解

    摘要:类才支持实例属性代码解读上面暂时只是概念性的写法,事实上,的类只是一个原型链的语法糖而已,主要是从写法上更接近于面相对象的类而已,另外一个作用就是区分的构造函数和函数之间的区分。 ES5的原型链和ES6的类实现详解 JavaScript最初设计时受到了面相对象编程的影响,从而引入了new关键字,来实例化对象。而在ES5中new后面跟着的是构造函数(也是函数),而到了ES6则改成了cla...

    Warren 评论0 收藏0

发表评论

0条评论

alin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<