- 每天保持一定的刷题量
- 八股文复习
- 内核学习
linux自启动方法:
- /etc/rc.local添加要执行程序的全路径
- /etc/rc.d/init.d添加自启动脚本
- 安装对应的服务,在/etc/systemd/system下创建service脚本设置为开机启动
内存池管理:
内存管理
栈:函数开辟,局部变量
堆:内存申请
全局存储区:全局变量
静态存储区:static
常量存储区:存放常量不能修改
代码区:存放代码
内存池管理
频繁使用new malloc 会造成大量的内存碎片,导致性能下降
内存池就是在真正使用内存前,先申请分配一定数量的,大小相等的内存块作为备用,当有内存的需求时就从内存池取,不够就申请新的内存。
内存池设计
子类和基类
dynamic_cast转换可以判断子类是该基类
Gcc编译参数
-O -O0 -O1 -O2 -O3 四级优化
0不做任何优化,适用于debug阶段
1对代码分支,常量和表达式进行优化
2寄存器级的优化,编译期间占用更多的内存和编译时间
3伪寄存器网络,内联函数,循环优化
s代码大小的优化,基本不用关心,优化会打乱程序的结构
Tcp学习
查找单链表的中间节点
快慢指针方法
智能指针
atuo_ptr:被废弃,会出现空指针访问
unique_ptr:独占资源所有权的指针
离开指针的作用域时自动释放内存
share_ptr:共享资源所有权的指针
对资源做引用计数,计数为0时自动释放。
内存开销比裸指针和无自定义的unique_ptr对象略大
维护的信息有两部分:指向共享资源的指针,指针控制信息的指针。
共享的指针都要指向两个部分的指针。
weak_ptr:共享资源的观察者,和share_ptr一起使用,不影响资源的生命周期
weak是share的观察者,要用weak正在观察的资源,就可以提升为share
如果share管理的对象被释放,weak_ptr就会变成nullptr
只要weak对象还存在,就可以知道share资源还在不在,通过控制块观察对象还在不在
不会增加计数,解决share思索的问题
enable_shared_from_this:成员函数获取this的shared_ptr正确方法是继承
class Bar : public std::enable_shared_from_this<Bar> {
public:
std::shared_ptr<Bar> GetSPtr() {
return shared_from_this();
}
};
auto sptr1 = std::make_shared<Bar>();
assert(sptr1.use_count() == 1);
auto sptr2 = sptr1->GetSPtr();
assert(sptr1.use_count() == 2);
assert(sptr2.use_count() == 2);