前言
作为一个c程序员,从业四五年了,可能是写业务代码写多了,基础的东西融入到思维中以后,用一板一眼语言表述不出来。也是当初基础不扎实。所以总结一下,日后经常回看。
一. static关键字
1. 隐藏
2. 影响变量的生存周期
在写MRCP的plugin时,遇到一个bug非常有代表性。
集成阿里的语音合成接口,我把阿里的库封装了一层,仅仅暴露获取token和发送请求的接口,内部使用curl封装了阿里语音服务的restful接口。通过回调函数,处理拿到的http响应的body数据。这个回调函数定义时,我使用了static修饰符修饰。功能测试时,合成请求正常返回。后来压力测试,就发现MRCP进程异常退出。
从coredump文件中可以看到:
导致MRCP服务宕掉的原因,并不是跟所做的plugin相关的处理,而且是mrcp服务本身的代码并没有做修改,所以猜测是踩了内存。当把static修饰符去掉以后,运行正常,压力测试通过。
为保险起见,回调函数不要使用static修饰,保证它的作用域是整个程序。
3. 默认初始化为0
4. c++中类的静态成员函数
二. 内存分区
三. 进程和线程的区别
1.
2.
3.
4.
四.线程之间的通信方式
五.大端序和小端序
大端序是最容易理解的。低地址存放数据的高位。高地址存放数据的低位。