首页 > 代码库 > 高性能编码准则
高性能编码准则
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