bzero:
原型:void bzero(void *s, int n);    
功能:置字节字符串s的前n个字节为零且包括‘\0’。  
说明:bzero无返回值,并且使用strings.h头文件,strings.h曾经是posix标准的一部分,但是在POSIX.1-2001标准里面,这些函数被标记为了遗留函数而不推荐用。
在POSIX.1-2008标准里已经没有这些函数了。推荐使用memset替代bzero。

memset:
void *memset(void *s, int ch, size_t n);  
函数解释:将s中前n个字节替换为ch并返回s;  
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。

常见的三种错误: 
第一: 搞反了ch 和 n的位置.  一定要记住 如果要把一个char a[20]清零, 一定是 memset(a, 0, 20)  而不是 memset(a, 20, 0)  
第二: 过度使用memset, 我想这些程序员可能有某种心理阴影, 他们惧怕未经初始化的内存, 所以他们会写出这样的代码:  
char buffer[20];  memset(buffer, 0, sizeof((char)*20));  strcpy(buffer, "123");  
这里的memset是多余的. 因为这块内存马上就被覆盖了, 清零没有意义。

第三: 其实这个错误严格来讲不能算用错memset, 但是它经常在使用memset的场合出现;

总结:关于字符数组的初始化,bzero和memset二者在效率上没有太大的差别,但是在项目的压力测试中,发现性能明显下降,变怀疑在程序中的若干临时字符数组的初始化(使用bzero)身上。于是修改为首个字符置零的方式而非全部置零的方式初始化,响应得到明显的提升。原来在mp3检索的每一条结果都要进行bzero对临时数组初始化,每一个请求需要30次的bzero对临时数组的置零。于是想到了,在非必要的情况下,只对临时数组的第一个(或前几个)字符置零的初始化方式对比与使用bzero的话,能够明显提高性能。

最新文章

  1. 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
  2. opencv 简单模糊和高斯模糊 cvSmooth
  3. PHP.ini文件读取不到
  4. Java_JDK_HashMap
  5. maya user guider第一课,一些基本概念
  6. Ventuz配置Leap Motion环境
  7. getSharedPreferences()与getSharedPreferences()与getDefaultSharedPreferences()的区别
  8. ZooKeeper的学习与应用
  9. java名词,关键字
  10. bootstrap-edittable 使用笔记之 (select, data,text, number)
  11. [官网]Red Hat Enterprise Linux Release Dates
  12. 解决RobotFramework的关键字不能高亮的问题
  13. ios之快速领会VFL的demo
  14. [C++]linux下实现rm()函数删除文件或目录
  15. Atom编辑器试用(Win7)
  16. 解决网卡无法自动获取ip的办法
  17. ubuntu18.04 没声音解决方案(坑自己版)
  18. apache2.2控制目录文件访问设置
  19. TOSCA自动化测试工具--打开已存在的Projects
  20. iOS 隐藏导航栏下的黑线

热门文章

  1. react学习笔记1--基础知识
  2. C#图片压缩处理
  3. hibernate 管理 Session(单独使用session,不spring)
  4. leetcode 之 Unique Paths
  5. javascript/jquery读取和修改HTTP headers
  6. URAL 1404. Easy to Hack! (模拟)
  7. 插件式Web框架
  8. Android - 视图Android应用(apk)签名
  9. 【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享
  10. NGUI ScrollView动态加入和删除对象。