首页 > 代码库 > 高性能编码准则

高性能编码准则

1.字节边界对齐 提高读写速度

2.构造函数尽量使用初始化列表(不然对象类型会有一次默认构造 初始值)

3.尽量使用前置++ ,因为后置++会生成临时对象

4.不要用结构体着函数返回值

  struct a;

  a=f(1) ;

  会生成临时对象

  struct a = f(1);  这样不会生成临时对象

5.避免使用赋值形构造(可以在构造函数前加explicit避免----不允许隐式转换)

  std::string s= "hello";    这句的实际操作是s  = std::string temp("hello");

  有一个临时对象产生,正确的做法为std:string s("hello"); 直接调用构造函数

6.简化循环内的处理((1)必须把重复操作放到循环外面  (2)最忙的循环放在里面)

7.尽量避免使用递归,最好转化成循环(必须要用,必须有确定的跳出条件)

 

8.少用浮点数(*10,*100转成整数处理)

9.函数参数(复杂结构)传指针或者引用----避免拷贝构造

10.关键路径上不使用字符串格式化I/O(字符串格式化很慢)

11.不要随便申请内存(能不new,就不要New),用栈区内存

  string是动态大小的,空间不够时会New内存,用C语言字符串比C++ string快很多

 

 12.用sizeof(编译时计算好了),不用strlen(运行时才计算)

  char a[10] = “hello”;

  sizeof(a);

  strlen(a);

  结果为: 10 5

 

13.经常申请小于128k的堆区空间,会导致内存膨胀

  因为小块内存,是直接通过偏移堆低指针来实现的,只有最新的都释放了,才会释放之前的内存,不断申请就会导致膨胀

14.慎用STL容器---滥用堆区小块内存

15. vector    deque   list 选择合适的容器

  std::vector为一段连续的空间, 增删需要移动内存块,甚至需要重新分配内存

  deque为多块定长堆区数组串起来

  std::list双向环形链表

  map

  hash表

  

 16.多线程

   互斥锁

  读写锁

  条件锁

  自旋锁

  屏障锁

17.高效I/O kqueue  epoll