memset对bool型变量赋false比对int型变量赋0快了10倍

fill对bool型变量赋false和对int型变量赋0效率一样

fill对int型变量赋0比memset对int型变量赋0慢了10倍

归结来说,以后要赋变量false的初值时,应该用bool型变量,用memset赋

#include <cstdio>
#include <cstring>
#include <ctime>
#include <algorithm>
using namespace std;int d[2000000];
bool d2[2000000];
int has_train[1000][1000][2];
bool has_train2[1000][1000][2];int main()
{clock_t start, finish;start = clock();int k = 1000;while(k--){memset(d, 0, sizeof(d));}finish = clock();printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);start = clock();k = 1000;while(k--){memset(d2, false, sizeof(d2));}finish = clock();printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);start = clock();k = 1000;while(k--){memset(has_train, 0, sizeof(has_train));}finish = clock();printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);start = clock();k = 1000;while(k--){memset(has_train2, false, sizeof(has_train2));}finish = clock();printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);start = clock();k = 1000;while(k--){fill(d, d+2000000, 0);}finish = clock();printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);start = clock();k = 1000;while(k--){fill(d2, d2+2000000, false);}finish = clock();printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);start = clock();k = 1000;while(k--){fill(has_train[0][0], has_train[0][0]+2000000, 0);}finish = clock();printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);start = clock();k = 1000;while(k--){fill(has_train2[0][0], has_train2[0][0]+2000000, false);}finish = clock();printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);return 0;
}

//最后我尝试了直接对int型和bool型数组赋值而不使用memset和fill,发现效率和memset对int 型数组赋值0效率是一样的。

转载于:https://www.cnblogs.com/thesky/p/11113306.html

memset, fill 对bool,int 赋值的效率相关推荐

  1. 函数 —— memset(给数组重新赋值,用指定字符替换数组中的部分值)

    描述 C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符. 参数 str -- ...

  2. 初始化与赋值哪个效率高?

    初始化定义:指创建变量并给它赋初始值. 赋值定义:擦除对象的当前值并用新值代替.int a = 4://直接初始化, a = 5://赋值初始化 总结:赋值初始化和直接初始化对比,直接初始化的效率很高 ...

  3. 关于Arrays.fill方法和Java赋值的底层原理

    目录 问题 原理 参考 问题 今天在写leetcode的时候看到了这样一个例子: StringBuilder[] a = new StringBuilder[5]; Arrays.fill(a, ne ...

  4. C语言补漏(1)--- char到int赋值的一个陷阱

    作为一个C的新手(虽然学的第一门语言就是C,可是用C实际开发项目却是最近的事情),对使用C过程中遇到的各类问题.疑惑.知识漏洞进行弥补无疑是非常有必要的,于是决定将每次遇到的知识漏洞写到博客上. 今天 ...

  5. C++BOOL,int,float,指针类型的变量a 与“零”比较语句

    BOOL if ( !a ) or if(a) int if ( a == 0) float const float EXPRESSION EXP = 0.000001 if ( a < EXP ...

  6. int** 赋值_Python的赋值、浅拷贝、深拷贝之间的区别

    这里用三张图来说清Python的赋值.浅拷贝.深拷贝之间的区别. 补充说明: 1.首先要理解 不可变数据.可变数据类型: 2.对于其他语言(如JAVA)的浅拷贝.深拷贝逻辑相同: 3.下图所描述的数据 ...

  7. int** 赋值_关于Java语言复合赋值运算符的两个问题,快来瞧瞧

    短文涨姿势,看了不白看,不关注等啥? 我们知道,在Java以及很多高级编程语言当中,都有一种运算符叫做复合赋值运算符.复合赋值运算符由两个符号组成,它所能完成的运算操作也分为两步:第一步是运算,第二步 ...

  8. int** 赋值_一篇文章搞明白Integer、new Integer() 和 int 的概念与区别

    基本概念的区分 1.Integer 是 int 的包装类,int 则是 java 的一种基本数据类型 2.Integer 变量必须实例化后才能使用,而int变量不需要 3.Integer 实际是对象的 ...

  9. java填充二维数组_Java用Arrays.fill()初始化二维数组的实现

    在最短路径问题上遇到了一个问题,对于二维int数组 map[][],需要初始化为int的最大值,不想用双重循环赋初值,想用Arrays.fill()填充但是失败了...... 首先说明,Arrays. ...

最新文章

  1. C++ 指针运算符( 和 *) 终于讲明白了
  2. Select的OnChange()事件
  3. 识别字符串中的表达式
  4. U3D包大小优化之microlib
  5. ubuntu phpstorm 安装xdebuger
  6. php 千分制显示数字,千分制计算说明
  7. linux输入ls后不显示_零基础学习之Linux基础命令小结
  8. FTP(二)ftp部署与防火墙配置
  9. php memcached 方法,php操作使用Memcached常用方法代码和例子大全
  10. 算法 matlab_MATLAB遗传算法及其实现
  11. 面向对象与面向过程对比
  12. php判断是不是手机端访问
  13. mysql 循环语句语法_MySQL循环语句之while循环测试
  14. 数据挖掘概念与技术_第三版_课后习题
  15. 基于PHP的房屋出租管理系统
  16. Python处理excel合并单元格
  17. java定义矩形的周长和面积_定义一个长方形类,定义 求周长和面积的方法实例
  18. 集成OpenLDAP与Kerberos实现统一认证(三):基于SASL/GSSAPI深度集成
  19. 简单的哈夫曼树程序实现
  20. 发布文章的php模板,PHP实现发送模板消息(微信公众号版)

热门文章

  1. 神一样的美国高中作文比喻集锦
  2. 【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码
  3. python可以做哪些小工具_python的简单实用小工具
  4. S32K144的FLASH中的SDK函数(FLASH_DRV_EraseSector)不能正常执行
  5. sybase监控执行sql(转自新浪)
  6. 《数据库原理》复试面试篇
  7. 图片内容转文字用Java怎么实现?
  8. 什么是云服务器ECS?云服务器ECS详解
  9. java中什么是外层实例,ew MyAsyncTask(); 报错
  10. 川希:普通人通过理财就能实现财务自由?大骗局!