• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-02-11 14:46 Aet 隐藏边栏 |   抢沙发  6 
文章评分 2 次,平均分 5.0

Part1

32位内存大小和对齐

string构造开销对比

判断一个类有没有虚函数

判断链表有没有环

Part2

thread

  1. 调用CreateThread可以创建一个线程内核对象,内核对象创建成功后,系统会给它从进程的地址空间分配空间供线程使用。
  2. 系统把传给CreateThread的pvParam参数写入线程堆栈的最上端,然后把指定的线程的入口函数的地址,再写到该线程的堆栈里面。
  3. 每个线程都有自己的CPU寄存器,这个就是线程的上下文,记录了该线程上一次运行时的状态。这些寄存器是被存到了一个CONTEXT结构体里面的,这个结构体本身是存到了线程内核对象里面的。
    1. 指令指针寄存器
    2. 堆栈指针寄存器
  4. 而C++的std::thread对象内部是调用的__beginthread_ex,这个方式内部其实也是调用了CreateThread,因为操作系统知道的唯一的创建线程的方式就是CreateTHread。但是这两个函数是有区别的:
    1. 会在C/C++运行时库的堆上分配一款空间,叫__tiddata,这个空间的话,会把线程的入口函数的地址,存到这里去。
    2. 然后在内部调用CreateThread,不会传函数的地址,传的是threadstrartex的地址,threadstartex传过去的是tiddata的地址。退出时先调用endthreadex,为了去销毁那部分tiddata空间。
    3. 通过TlsSetValue把一个值与主调线程关联起来,就是线程局部存储。

进程同步方式

  1. 互斥量
  2. 信号量
  3. 事件

线程同步方式

  1. 全局变量
  2. 互斥量
  3. 信号量
  4. 事件
  5. 临界区

AVL和红黑树

  1. AVL
    1. 完全的平衡二叉树,如果有频繁的插入删除的话,会引起频繁的rebalance,所以效率会比较低
  2. 红黑树
    1. 弱平衡的平衡二叉树,因为它的节点是受一些限制的,这些限制会保证从根节点到叶子节点的路径中,没有任何一条路径的长度是其他的2倍。
    2. 所以呢,它的插入最多旋转2次,删除最多旋转3次。相对于AVL的话,效率会比较高。
  3. 红黑树限制
    1. 首先每个节点要么黑色的要么是红色的
    2. 根节点,叶子节点都是黑色的
    3. 黑色节点的子节点都是红色的
    4. 任意一个节点到每个叶子节点之间路径,都包含了相同数量的黑色节点

观察者模式

  1. 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将做出相应反应。
    1. 发生改变的对象称为观察目标,被通知的对象称为观察者
    2. 一个观察目标可以对应多个观察者,而这些观察者之间没有相互联系,可以根据需要增加和删除观察者。

监控进程

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享