自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 资源 (1)
  • 收藏
  • 关注

原创 静态链接一个隐藏的坑以及深入理解静态和动态链接

如果生成的是.so文件,则:动态链接库的一个特点是:代码段和数据段的偏移量是固定的,也就是每个变量,函数(每个符号)都有一个偏移量GOT(Global Offset Table),这个偏移量是固定的,当.so被进程加载后,该.so有个起始地址,那么进程中的其他代码想要访问某个函数或变量,只需要用这个起始地址加上GOT中该符号的值,就是最终的地址。中的abc不会再做修正,都是自己的abc,所以当所有dll都加载进cpp后,就出现了两个abc变量,cpp中用的是dll1中的,dll2中用的是他自己的。

2023-11-03 12:25:43 137

原创 C++ function, lamda 和 std::future,C函数指针之间的关系

lamda的本质是一个函数对象,并且捕获的变量,都是这个函数对象的成员变量。所以,按值捕获,相当于把值拷贝进了这个闭包里面,所以即使这个lamda不实际执行,这个值也从捕获的那一刻起就确定下来了。包括捕获shared_ptr也是,引用计数的增加,也是在捕获的那一刻就加一了,不管这个lamda有没有实际的执行。

2023-10-26 21:53:59 111

原创 如何用Visual Studio自带工具分析内存泄漏?

如果用调试--性能探测器去附加进程,则内存使用率这一项是灰的,无法勾选,但是用先attach,再显示诊断工具就可以分析内存,所以无论何时,都只用先附加进程,再显示诊断工具这一种方法!可以看到分配内存时的堆栈是std::thread::Invoke --> memleak,只看大小差异有值的层级,就可以把堆栈显示出来。首先用vs attach到进程,再点调试--窗口--显示诊断工具。可以看到两次分配的内存地址,和大小。

2023-10-26 15:42:44 3939

原创 如何编写cmake脚本?

includeCmake 后面跟的参数列表:cmake -G 查看所有的生成器, cmake -G "the name of generator" 指定某个生成器cmake中只有变量和命令,变量只有字符串一种类似,不管是否带引号,命令可以理解成函数。

2023-10-26 15:35:57 126

原创 Mac和Windows UI线程比较

mac上在11.0之前,有些函数必须要放在主线程(主UI线程)执行才可以,放在自己起的UI线程就不行,那说明,一个进程支持多个UI线程,很可能也是最近几年刚支持的,之前的系统无论win还是mac,可能确实是只有主线程才是UI线程。为什么要自己起一个UI线程?1. 某些函数,必须要在UI线程执行, 2. 某些系统的消息,必须要放在UI线程中接收。

2023-10-26 15:34:04 60

原创 如何看懂崩溃dump中的汇编代码?

所有指令,带q的是8个字节(64位),带l的是4个字节(32位), 32位的寄存器全是eax, ebx等,64位的寄存器全是rax,rbx等为了方便,以下所有命令没有加l或者q,看的时候自行脑补即可mov a, b,是从a移动到b, 注意:如果不带括号,则是直接改变寄存器的值,比如mov $rsp, $rbp,直接把寄存器值改了,如果是mov $1, ($rbp),则改变的是rbp指针指向的内容,相当于多了一次解引用。

2023-10-26 15:32:05 165

原创 MacOS如何解析系统库的符号?

如题,在分析这个crash时,顶层调用栈显示libdispatch.dylib::unknown,无法进一步定位crash的原因。

2023-10-26 15:25:05 124

原创 细数两种内存泄露方式

另一种是不停的创建handle但是不close,这种情况下触发的是handle泄露,但其实handle也会占用一些内存,这部分内存如果在任务管理中查看内存占用,是不会逐渐增加的,但是系统的内存确实在逐步的耗尽,并且如果关闭进程,这部分内存也随之被释放,所以现在的操作系统对内存的管理已经相当复杂,不太好用一句话定义进程占用了多少内存。第一栏是使用中,这个其实就是已经使用的物理内存和总的物理内存,可以看到,虽然有虚拟内存的存在,但是系统总是把可用的物理内存和可用的虚拟内存的大小保持差不多大。

2023-10-26 15:17:46 33

原创 如何分析CPU占用率性能问题?

CPU每隔固定周期会发出timer interrupt (时钟中断),CPU的频率HZ用来定义每秒钟产生多少个时钟中断。

2023-10-26 15:14:59 789

原创 一次函数析构时崩溃排查过程

只用某一特定软件版本才能复现,小于该版本或大于该版本的都无法复现只用poly sync 40作为HID设备,并在windows系统上,当选中poly 40作为当前麦克风设备时,几乎每次都crash。不挑windows机器,用不同的两台windows,装alpha17都能复现。

2023-10-26 14:59:55 195

原创 C++中的RingBuffer,双Buffer,RCU

ringbuffer适用于单生产者,单消费者的场景,虽然是两个线程,但是却不用加锁,可以用数组或者链表实现,以下介绍一种典型的数组实现方法,注意整个Buffer的大小是预先要定好的。如图,N = 5,但是要区分满和空,所以实际存储的大小要比N小1,也就是只能存储4个元素。write和read是两个指针,也可以看成是序号,都是指向下一个要写或者要读的位置!注意这一点很关键,是下一次要读/写的位置!

2023-10-26 14:46:24 507

原创 WinDbg工具用法分享

自动分析:!analyze -v.excr 切换到崩溃的堆栈上下文k/kb/kp 查看堆栈详细信息, kd以raw style查看堆栈信息!threads 显示所有的线程堆栈 ( ~*)~ThreadID 切换到某个线程 (~5s :进到5号线程堆栈里面(要加s!))!address -summary 查看内存概况!heap 0 检查所有的堆内存的概况,!heap -stat -h heapAddress 查看某个堆的详细信息!

2023-10-26 14:43:23 295

total phase data center 7.01 windows安装包

total phase data center 7.01 windows安装包

2022-08-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除