1、memmove 对同一个指针不操作,所以调用memmove之前不用比较两个指针是否相同

2、使用memmove是比memcpy更安全的

3、https://www.cnblogs.com/luoquan/p/5265273.html

void CTestDLLDlg::OnBnClickedButton6()
{
const int size = ;
char* data = new char[size];
memset(data, , size - ); char* data1 = new char[size];
memset(data1, 'a', size - ); clock_t begin = clock();
for (int i = ; i < size; ++i)
{
memmove(data1, data, size);
}
clock_t end = clock(); double duration = ;
duration = (double)(end - begin) / CLOCKS_PER_SEC;
CString str = _T("");
str.Format(_T("-不同指针复制- %f---\n"), duration);
OutputDebugString(str); clock_t begin1 = clock();
for (int i = ; i < size; ++i)
{
memmove(data1, data1, size);
}
clock_t end1 = clock(); double duration1 = ;
duration1 = (double)(end1 - begin1) / CLOCKS_PER_SEC;
CString str1 = _T("");
str1.Format(_T("-同指针复制- %f---\n"), duration1);
OutputDebugString(str1); clock_t begin2 = clock();
for (int i = ; i < size; ++i)
{
}
clock_t end2 = clock(); double duration2 = ;
duration2 = (double)(end1 - begin1) / CLOCKS_PER_SEC;
CString str2 = _T("");
str2.Format(_T("-空循环- %f---\n"), duration2);
OutputDebugString(str2); delete data;
data = nullptr; delete data1;
data1 = nullptr; }

显示结果是:

-不同指针复制- 49.971000---
-同指针复制- 38.833000---
-空循环- 38.833000---

将memmove换成memcpy,显示

-不同指针复制- 49.782000---
-同指针复制- 38.847000---
-空循环- 38.847000---

没觉得memcpy有多快

memmove 对同一个指针不操作的更多相关文章

  1. 对二维数组使用指针进行操作的探索(C语言)

    /* Name: 对二维数组使用指针进行操作的探索 Copyright: Author: lingr7 Date: 01/12/18 11:55 Description: */ #include< ...

  2. PHP中使用数组指针函数操作数组示例

    数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...

  3. C使用FILE指针文件操作

    文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件 ...

  4. C++指针的操作和运算(转)

    既然指针是一种数据类型,那么它也应该有对应的操作或运算,正如整数能做加减乘除一样.但是每一种操作或运算都应该对这种数据类型有意义.比如两个实数可以用关系运算得知哪个大哪个小,而两个虚数却不能使用关系运 ...

  5. Python基础笔记系列十一:标准输入输出、文件读写和指针等操作

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 标准输入输出一.输入 在sublime中这个时候需要安装SublimeRE ...

  6. C#使用不安全指针来操作bitmap

    C#允许通过不安全指针实现像C++一样操作指针,这个速度是最快的.下面这个例子是修改一幅RGB图像的每个像素值,速度很快,测试一张2592*1944的彩色图像,只需要几ms就能够全部遍历. /// & ...

  7. 使用offsetof对结构体指针偏移操作

    题目来自于COMP20003 Tutorial 2: Program m ing Challenge 2.2 The technology stack at Hidebound Inc. uses a ...

  8. c语言中如何通过二级指针来操作二维数组

    通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅 ...

  9. Java多线程对同一个对象进行操作

    示例: 三个窗口同时出售20张票. 程序分析: 1.票数要使用一个静态的值. 2.为保证不会出现卖出同一张票,要使用同步锁. 3.设计思路:创建一个站台类Station,继承THread,重写run方 ...

随机推荐

  1. Intellij IDEA 使用spring-boot-devtools无效解决办法一

    Intellij IDEA 使用spring-boot-devtools maven依赖 ``` <dependency> <groupId>org.springframewo ...

  2. 安装cartographer_ros

    这里使用的是hitcm(张明明)的github地址,由于google官方的教程需要FQ下载一些文件,因此容易失败,经验证hitcm(张明明)对原文件进行了少许修改后可以成功安装,在他的修改中核心代码不 ...

  3. MongoDB(课时11 嵌套集合)

    3.4.2.6 嵌套集合运算 MongoDB数据库里每个集合数据可以继续保存其它的集合数据.例如:有些学生信息中需要保存家长信息. 范例: 增加数据 db.students.insert({" ...

  4. kali 下程序卸载方法

    ali中主要为2种卸载方法:1.apt2.dpkg 使用apt的方式有:apt-get remove [package]apt-get remove --purge # ------(package ...

  5. python json格式转xml格式

    import xmltodict #json转xml函数 def jsontoxml(jsonstr): #xmltodict库的unparse()json转xml xmlstr = xmltodic ...

  6. VcCallC#_01

    1.C# 代码: using System; using System.Collections.Generic; //using System.Linq; using System.Text; //u ...

  7. [原][osg][粒子特效]spark粒子特效生成流程

  8. TypeScript 小记

    1. 对比JavaScript TypeScript是JavaScript的超集,可编译为JavaScript,主要提供类型系统等增强代码的可读性和可维护性,适合中大型项目多人协作: TypeScri ...

  9. 女生学java是否真的没有优势

    随着女性越来越独立,我们可以看到再以前我们认为不适合女性朋友从事的工作,也出现了越来越多的女生,例如对IT行业也不再跟之前一样畏惧.虽然当下很多人所持的观点依旧是,女生不适合IT行业,但是很多女生已经 ...

  10. Vue组件(知识)

    form最后一节. 组件基础 组件的复用:  data必须是函数 组织 通过Prop向子组件传递data 单个根元素 通过event向父组件发送消息: 使用事件抛出一个value, 在组件上用v-mo ...