- 博客(155)
- 资源 (1)
- 问答 (4)
- 收藏
- 关注
原创 简要描述C++ Memory Order
memory_order_relaxed: 最宽松的内存顺序, 只保证操作的原子性和修改顺序 (modification order).
2024-07-06 23:11:46 796
原创 Vulkan学习——渲染3D模型
Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口(API),最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。与OpenGL类似,Vulkan针对全平台即时3D图形程序(如电子游戏和交互媒体)而设计,并提供高性能与更均衡的CPU与GPU占用,这也是Direct3D 12和AMD的Mantle的目标。与Direct3D(12版之前)和OpenGL的其他主要区别是,Vulkan是一个底层API,而且能执行并行任务。除此之外,Vulkan还能更好地分配多个CPU核心的使用。
2024-07-01 18:30:13 1390
原创 FFmpeg5.0源码阅读——格式检测
在拿到一个新的格式后,FFmpeg总是能够足够正确的判断格式的内容并进行相应的处理。本文在描述FFmpeg如何进行格式检测来确认正在处理的媒体格式类型,并进行相应的处理。
2024-07-01 15:46:19 481
原创 C++异常处理实现(libstdc++)
为了更好的理解C++中异常处理的实现,本文简单描述了Itanium ABI中异常处理的流程和llvm/libsdc++简要实现。
2024-05-05 17:10:01 1284
原创 X264编码器参数
H.264是ITU(International Telecommunication Unite 国际通信联盟)和MPEG(Motion Picture Experts Group 运动图像专家组)联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准里称为H.264,在MPEG的标准里是MPEG-4的一个组成部分–MPEG-4 Part 10,又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。
2024-05-02 21:59:12 950
原创 正确对你的C++代码进行性能测试——DoNotOptimize实现原理
是google-benchmark提供的一个函数,强制编译器不要对制定的变量进行任何优化。需要注意的是DoNotOptimize强制编译器不要对制定的不指定的编译器月变量优化而不是不对表达式进行优化,也就是说你的表达式可以被优化的化依然会被优化只是结果一定写内存。return a;int a = 1;return 0;不加DoNotOptimize的化testFunc、a和t都会被删除,而编译后的结果如下。可以看到两个变量都是读取的栈内存。1147: 00。
2024-05-02 12:53:33 484
原创 C++中volatile的具体含义和可能的坑
提醒编译器不要对该变量相关的代码进行优化,避免出现意外的负面作用;对类似的表达式不进行编译层面的指令重排。编译指令重排也是一种编译器优化手段,这条严格来说也是第一条的变种。int g = 0;a < n;a++) {i++;//func对应的汇编a < n;a++) {j++;//func1 对应的汇编a < n;a++) {g++;//func2对应的汇编上面的代码中可以看到对于普通变量的++直接被编译器在编译期间就分析出来结果,直接赋值了,for循环直接被干掉了。
2024-01-22 00:52:43 2421
原创 H264之NALU结构详解
NAL层即网络抽象层(Network Abstraction Layer),是为了方便在网络上传输的一种抽象层。一般网络上传输的数据包有大小限制,而AVC的帧大小远远大于网络传输的字节大小限制。因此要对AVC的数据流进行拆包,将一帧数据拆分为多个包传输。和NAL层相对是VAL层,即视频编码层(Video Coding Layer)NALU就是经过分组后的一个一个数据包。每个NALU由一个1字节的NALU头部和一个包含控制信息或编码视频数据的字节流组成。NALU头部包含了NALU的类型以及其重要性的信息。
2023-12-10 08:08:41 1041
原创 C++ libcxxabi中dynamic_cast 实现
C++中,用于有虚函数的继承链中父类型到子类型的安全转换。class A{public:class B{如何识别当前类的类型,这依赖于RTTI。C++中包含虚函数的对象都有一个虚函数表,一般情况下都在首地址(多继承和虚继承会有多个)有一个指向该虚函数表的虚函数表指针。基类偏移;typeinfo;如果有虚函数的话会有虚析构函数指针,一般情况下有两个;虚函数指针,如果是虚继承对应的虚函数指针可能是一个thunk function。
2023-11-26 22:35:56 429
原创 【crash】 cxa_pure_virtual 崩溃分析与原理
怀疑到这一点,我这边开始找资料(类似的问题印象中标准中是不管的,那大概率在ABI中定义的,那我们去看ABI的定义)。怀疑到这一点,我这边开始找资料(类似的问题印象中标准中是不管的,那大概率在ABI中定义的,那我们去看ABI的定义)。当类被析构时,基类的析构稍微比较耗时时,第二个线程尝试访问当前类的一个被重写的纯虚函数,由于此时的虚函数表中的纯虚函数已经被修改为。当类被析构时,基类的析构稍微比较耗时时,第二个线程尝试访问当前类的一个被重写的纯虚函数,由于此时的虚函数表中的纯虚函数已经被修改为。
2023-11-23 00:37:40 870
原创 Folly库实现阅读——FBString
FBString是facebook内部使用的基础库的string组件,为了达到更好的性能采用了多种存储策略,优化不同场景的性能。FBString完全兼容,同时支持jemalloc更快的分配内存,减少磁盘碎片,加快并发情况下的速度和性能。实现细节三种存储策略;与100%兼容。COW 存储时对于引用计数线程安全。对 Jemalloc 友好。如果检测到使用jemalloc,那么将使用jemalloc的一些非标准扩展接口来提高性能。
2023-09-24 22:41:10 369
原创 图像处理之频域滤波DFT
傅里叶变换可以将任何满足相应数学条件的信号转换为不同系数的简单正弦和余弦函数的和。图像信号也是一种信号,只不过是二维离散信号,通过傅里叶变换对图像进行变换可以图像存空域转换为频域进行更多的处理。本文主要简要描述傅里叶变换以及其在图像处理中的简单应用,并进行一些简单的实验来描述其相关性质。
2023-09-16 21:57:34 781
原创 FLV封装格式
FLV流媒体格式是sorenson公司开发的一种视频格式,全称为Flash Video。它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。由于其视频文件体积轻、封装播放简单等优点,使得其非常合适在网络上传输,目前主流的视频网站无一例外支持FLV流媒体格式进行视频播放。
2023-09-09 11:46:17 188
原创 Jpeg文件格式详解
JPEG(Joint Picture Expert Group)编解码标准是由国际标准化组织(ISO)和CCITT联合制定的静态图象有损压缩编码标准(标准也定义了无损压缩内容但是大多数系统都不支持)。JPEG是一种编解码标准不是一种文件格式,其对应的文件格式有JIF,JPEG/JFIF,JPEG/EXIF等。
2023-09-03 16:50:46 2853
原创 FFmpeg5.0源码阅读——FFmpeg大体框架(以GIF转码为示例)
前一段时间熟悉了下FFmpeg主流程源码实现,对FFmpeg的整体框架有了个大概的认识,因此在此做一个笔记,希望以比较容易理解的文字描述FFmpeg本身的结构,加深对FFmpeg的框架进行梳理加深理解,如果文章中有纰漏或者错误欢迎指出。本文描述了FFmpeg编解码框架的工程结构,基本构成以及大体的调用流程。因为FFmpeg的滤镜是相对独立的一个模块,因此在此不会进行描述。
2023-08-26 17:09:39 1978
原创 FFmpeg5.0源码阅读——URLContext和URLProtocol
本文描述FFmpeg中URLContext和URLProtocal的实现。
2023-08-26 12:50:10 770
原创 C++对象模型实验(clang虚函数表结构)
本科期间有对比过msvc,gcc,clang的内存布局,距今已经6-7年了,当时还是使用的c++11。时间过得比较久了,这部分内容特别是内存对齐似乎C++17发生了一些变化,因此再实践下C++类模型。本文描述了C++不同类型的实际内存模型实现,主要关注虚函数表的具体内存布局。虽然clang,msvc都提供了对应的命令让我们直接查看类对象的内存布局,但是我们自己解析一下理解更深一点儿。
2023-08-20 22:33:20 430 1
原创 FFmpeg5.0源码阅读——av_interleaved_write_frame
本文主要详细描述FFmpeg中封装时写packet到媒体文件的函数。
2023-07-30 20:33:23 1678
原创 FFmpeg5.0源码阅读—— avcodec_send_frame && avcodec_receive_packet
本文主要描述了FFmpeg中用于编码的接口的具体调用流程,详细描述了该接口被调用时所作的具体工作。
2023-07-23 21:34:32 965
原创 【crash】浮点除0堆损坏
然后就去看代码排查调用链中可能导致堆损坏的地方(因为开发机无法复现,因此只能通过分析+日志来排查),在排查代码过程中发现了几处可能越界的操作以及除0。IEEE754规定了浮点除0运算的结果为+INF或者-INF,但是C++标准明确规定了该行为未定义的,使用可能会导致UB。实际测试过程中发现只有低版本的机器浮点除0是不支持的,而新机器无论是windows还是Mac浮点除0编译器只会报warning但是结果是INF不会出错。,比较反常,因此排查了该值的计算来源发现是有double除0。比较小只有20个元素)。
2023-07-14 23:32:34 233
原创 FFmpeg5.0源码阅读—— avcodec_send_packet&&avcodec_receive_frame
本文主要描述了FFmpeg中用于解码的接口的具体调用流程,详细描述了该接口被调用时所作的具体工作。
2023-07-09 21:43:02 1318
原创 裁剪opencv库到2Mb
本文描述了如何对opencv进行裁剪已达到最小化,不限于使用模块编译,去除第三方库依赖,改变编译选项,限制导出符号等。
2023-07-08 22:00:44 1326
原创 简单的Elf解析器实现
之前虽然了解过ELF文件的具体格式,但是对改文件的理解还是存在一些不足,因此本文尝试写了一个简单的ELF解析器对ELF文件进行解析并输出Header,Program Header Table和Section Header Table。
2023-07-04 00:05:22 542
原创 Windows和Linux动态注入
摘要:最近对动态注入有一些兴趣因此搜索了些资料,简单整理了下相关的技术实现。本文只能够带你理解何如注入以及大概如何实现,对注入的方法描述的并不详细。 关键字:dll注入,hook,提权 读者须知:读者需要对Windows和Linux dll加载的基本流程比较熟悉。 注入就是将自己的代码注入到目标进程中强制目标进程执行,而动态注入就是将动态库强制加载进目标进程的进程空间从而对目标进程进行修改。动态注入有利有弊,可以用于反病毒、反外挂也可以用于投毒或者制作外挂。1 DLL注入 DLL是wi
2023-06-23 22:35:12 1507
原创 动态库的入口——VCRT(DLL)和CRT(SO)
为了更加深入的理解动态库的加载初始化过程,本文根据VCRT和Linux-CRT的代码实现详细描述了windows和linux平台下对应动态库加载时会进行哪些工作。本文重点关注全局变量的初始化时机,以及是否有其他额外的操作。
2023-06-23 00:25:11 962
原创 C++ 反汇编简要
C/C++都需要经过编译器变成对应的机器码,通常编译器对程序员是个黑盒子。有些时候我们可能会纠结编译器会不会进行RVO,EBO等优化,以及一些在我们看起来应该正常的代码因为一些UB的行为被C++编译器优化成了不可预期的代码。这时候如果我们了解具体代码是如何编译成对应的二进制机器码对我们查具体的问题非常有益。另一种场景,在开发软件时,线上环境能够复现的问题,我们本地可能是无法复现的。这就需要我们根据线上的堆栈分析具体的原因。
2023-06-19 22:17:28 2685
原创 FFmpeg5.0源码阅读——mov文件格式解析
之前在[Mp4格式详解](https://blog.csdn.net/GrayOnDream/article/details/127815260)中详细描述了Mp4文件格式的具体布局方式。为了更加深入理解mp4文件格式,本文记录了ffmpeg中解封装mp4文件的基本实现。
2023-05-28 22:39:01 2012
原创 C++源码剖析——unordered_map和unordered_set
之前看过侯老师的《STL源码剖析》但是那已经是多年以前的,现在工作中有时候查问题和崩溃都需要了解实际工作中使用到的STL的实现。因此计划把STL的源码再过一遍。
2023-04-08 21:19:17 669 1
原创 C++源码剖析——set,multiset,map和multimap
之前看过侯老师的《STL源码剖析》但是那已经是多年以前的,现在工作中有时候查问题和崩溃都需要了解实际工作中使用到的STL的实现。因此计划把STL的源码再过一遍。
2023-04-08 18:06:21 555
原创 C++源码剖析——序列容器适配器(stack,queue,priority_queue)
之前看过侯老师的《STL源码剖析》但是那已经是多年以前的,现在工作中有时候查问题和崩溃都需要了解实际工作中使用到的STL的实现。因此计划把STL的源码再过一遍。
2023-04-02 22:34:23 192
原创 C++源码剖析——list
之前看过侯老师的《STL源码剖析》但是那已经是多年以前的,现在工作中有时候查问题和崩溃都需要了解实际工作中使用到的STL的实现。因此计划把STL的源码再过一遍。
2023-04-02 19:56:27 354
原创 C++源码剖析——forward_list
之前看过侯老师的《STL源码剖析》但是那已经是多年以前的,现在工作中有时候查问题和崩溃都需要了解实际工作中使用到的STL的实现。因此计划把STL的源码再过一遍。
2023-04-02 16:19:02 394
原创 C++源码剖析——deque
之前看过侯老师的《STL源码剖析》但是那已经是多年以前的,现在工作中有时候查问题和崩溃都需要了解实际工作中使用到的STL的实现。因此计划把STL的源码再过一遍。
2023-04-02 14:53:31 836
原创 C++源码剖析——vector和array
之前看过侯老师的《STL源码剖析》但是那已经是多年以前的,现在工作中有时候查问题和崩溃都需要了解实际工作中使用到的STL的实现。因此计划把STL的源码再过一遍。
2023-03-26 12:48:41 468
Ubuntu 16.04下使用VirtualBox 电脑直接死机!键盘鼠标无响应!
2018-02-01
android数据库读取错误,读取到一半就报错了,求救啊!!纠结了好久
2017-02-23
新安装的android sdk和jre新建工程就显示错误,纠结了好久
2017-02-01
delete operator和operator delete
2016-08-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人