memset, fill 对bool,int 赋值的效率
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 赋值的效率相关推荐
- 函数 —— memset(给数组重新赋值,用指定字符替换数组中的部分值)
描述 C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符. 参数 str -- ...
- 初始化与赋值哪个效率高?
初始化定义:指创建变量并给它赋初始值. 赋值定义:擦除对象的当前值并用新值代替.int a = 4://直接初始化, a = 5://赋值初始化 总结:赋值初始化和直接初始化对比,直接初始化的效率很高 ...
- 关于Arrays.fill方法和Java赋值的底层原理
目录 问题 原理 参考 问题 今天在写leetcode的时候看到了这样一个例子: StringBuilder[] a = new StringBuilder[5]; Arrays.fill(a, ne ...
- C语言补漏(1)--- char到int赋值的一个陷阱
作为一个C的新手(虽然学的第一门语言就是C,可是用C实际开发项目却是最近的事情),对使用C过程中遇到的各类问题.疑惑.知识漏洞进行弥补无疑是非常有必要的,于是决定将每次遇到的知识漏洞写到博客上. 今天 ...
- 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 ...
- int** 赋值_Python的赋值、浅拷贝、深拷贝之间的区别
这里用三张图来说清Python的赋值.浅拷贝.深拷贝之间的区别. 补充说明: 1.首先要理解 不可变数据.可变数据类型: 2.对于其他语言(如JAVA)的浅拷贝.深拷贝逻辑相同: 3.下图所描述的数据 ...
- int** 赋值_关于Java语言复合赋值运算符的两个问题,快来瞧瞧
短文涨姿势,看了不白看,不关注等啥? 我们知道,在Java以及很多高级编程语言当中,都有一种运算符叫做复合赋值运算符.复合赋值运算符由两个符号组成,它所能完成的运算操作也分为两步:第一步是运算,第二步 ...
- int** 赋值_一篇文章搞明白Integer、new Integer() 和 int 的概念与区别
基本概念的区分 1.Integer 是 int 的包装类,int 则是 java 的一种基本数据类型 2.Integer 变量必须实例化后才能使用,而int变量不需要 3.Integer 实际是对象的 ...
- java填充二维数组_Java用Arrays.fill()初始化二维数组的实现
在最短路径问题上遇到了一个问题,对于二维int数组 map[][],需要初始化为int的最大值,不想用双重循环赋初值,想用Arrays.fill()填充但是失败了...... 首先说明,Arrays. ...
最新文章
- C++ 指针运算符( 和 *) 终于讲明白了
- Select的OnChange()事件
- 识别字符串中的表达式
- U3D包大小优化之microlib
- ubuntu phpstorm 安装xdebuger
- php 千分制显示数字,千分制计算说明
- linux输入ls后不显示_零基础学习之Linux基础命令小结
- FTP(二)ftp部署与防火墙配置
- php memcached 方法,php操作使用Memcached常用方法代码和例子大全
- 算法 matlab_MATLAB遗传算法及其实现
- 面向对象与面向过程对比
- php判断是不是手机端访问
- mysql 循环语句语法_MySQL循环语句之while循环测试
- 数据挖掘概念与技术_第三版_课后习题
- 基于PHP的房屋出租管理系统
- Python处理excel合并单元格
- java定义矩形的周长和面积_定义一个长方形类,定义 求周长和面积的方法实例
- 集成OpenLDAP与Kerberos实现统一认证(三):基于SASL/GSSAPI深度集成
- 简单的哈夫曼树程序实现
- 发布文章的php模板,PHP实现发送模板消息(微信公众号版)
热门文章
- 神一样的美国高中作文比喻集锦
- 【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码
- python可以做哪些小工具_python的简单实用小工具
- S32K144的FLASH中的SDK函数(FLASH_DRV_EraseSector)不能正常执行
- sybase监控执行sql(转自新浪)
- 《数据库原理》复试面试篇
- 图片内容转文字用Java怎么实现?
- 什么是云服务器ECS?云服务器ECS详解
- java中什么是外层实例,ew MyAsyncTask(); 报错
- 川希:普通人通过理财就能实现财务自由?大骗局!