cmake 构建类型:Debug、Release、RelWithDebInfo 和 MinSizeRel
cmake 构建工具中 CMAKE_BUILD_TYPE
变量支持下面四种构建类型:
Debug
:调试版本,没有优化,开启断言,最全调试信息。Release
:正式版本,最高优化,没有调试信息,关闭断言。RelWithDebInfo
:既优化又能调试的版本,关闭断言。MinSizeRel
:最小体积版本,目的在于优化体积而不是优化速度。
cmake 构建工具中 CMAKE_BUILD_TYPE
变量支持下面四种构建类型:
Debug
:调试版本,没有优化,开启断言,最全调试信息。Release
:正式版本,最高优化,没有调试信息,关闭断言。RelWithDebInfo
:既优化又能调试的版本,关闭断言。MinSizeRel
:最小体积版本,目的在于优化体积而不是优化速度。点击阅读全文查看详细内容
若想实现 dyninst 离线安装,只需要把源码目录下 cmake/packages.cmake 依赖包的下载规则改下,把 URL 改成 SOURCE_DIR。然后在对应的路径下放上解压的依赖源码。
点击阅读全文查看详细内容
记录不同架构调试寄存器的使用方法
为了解决内存碎片化问题,充分利用物理内存资源,Linux 提供了虚拟内存功能,并建立虚拟地址和物理地址直接的映射关系。进程无法直接访问物理地址,而是通过虚拟地址间接访问。一般虚拟地址都要比物理地址范围大,虚拟地址和物理地址并非总是一一对应关系,有时候虚拟地址尚未映射的物理地址,而只是一个空壳。当访问到尚未映射的虚拟地址时,就会触发缺页中断机制。
协程有时候被称为轻量级线程,它由程序员进行调度(切换),而不像线程那样需要内核参与,同时也避免内核进行线程切换的开销。因为协程切换保留的是当前上下文环境,也就是函数调用栈和当前的寄存器,而线程切换需要陷入内核态,改变线程对象状态。
go 把协程作为基础设施提供语言级的支持,cpp 没有提供语言级的支持,而是通过准标准库 boost coroutine2 库(boost coroutine 已经废弃,建议使用 boost coroutine2)为 cpp 提供的协程支持。
协程分为对称协程(symmetric)和非对称协程(asymmetric),对称协程需要显式指定将控制权 yeild 给谁,非对称协程可以隐式的转移控制权给它的调用者,boost coroutine2 实现的是非对称协程。