C/C++
文章平均质量分 53
随笔
502203305
不积跬步,无以至千里;
不积小流,无以成江海。
展开
-
c++11 regex 模块详解
regex。原创 2023-11-12 11:12:03 · 882 阅读 · 0 评论 -
valgrind massif 详解(内存分配释放分析)
内存分配释放分析原创 2023-09-16 09:22:39 · 1192 阅读 · 0 评论 -
chrono 模块详解
时间起点:epochduration, 转换规则;timepointclock: 从系统获取对应类型值, 用于生成匹配类型;clock两种clock定义了四种成员类型;主要差异在使用精度不同;类型分别是: 时长类型, 数学计数类型, 当前使用精度;时间点;time_point可以是时间日期, 也可以是启动时间点;原创 2023-09-02 17:03:48 · 261 阅读 · 0 评论 -
统计程序两个点之间执行的指令数量
perf。原创 2023-08-27 11:02:30 · 160 阅读 · 0 评论 -
C/C++ 预处理结果分析,代码分析
即外部参数, 一般是外部传入宏定义;原创 2023-07-22 12:00:58 · 98 阅读 · 0 评论 -
检查一个指针是否合法,可访问
指针校验原创 2023-07-17 14:53:19 · 545 阅读 · 0 评论 -
cpp 分析全局变量局部静态变量在源码中的位置
综上可以得到大概位置;也可以基本知道变量名, 搜索代码即可;全局的可以定位到信息, 但是静态类型不行;静态类型限制比较死, 分析.o文件即可确定;因为局部生效;全局的则可能extern之类的, 而且一般只有一个定位;位置也比较固定;没有重复;原创 2023-07-14 23:56:20 · 285 阅读 · 0 评论 -
统计函数被调用次数和对应位置及堆栈
【代码】统计函数被调用次数和对应位置及堆栈。原创 2023-07-13 22:03:19 · 242 阅读 · 0 评论 -
asan 关闭部分功能,禁止错误中止机制
支持环境变量配置。原创 2023-07-13 13:38:31 · 579 阅读 · 0 评论 -
asan 输出案例解析
【代码】asan 输出案例解析。原创 2023-05-29 21:17:44 · 773 阅读 · 0 评论 -
多线程问题分析
killabort。原创 2023-05-04 12:02:55 · 80 阅读 · 0 评论 -
符号别名,编译指定版本,链接指定版本
使用旧版本库, 可能没有某些符号, 而刚好这些符号在启动时没有解析;, 通过符号管理, 就可以因为大部分符号版本过旧而发出警告;如果新库, 从新库中搜索就符号并使用;即使了解, 但是手写加密规则或多或少都可能出错;一般是最新版本, 也可能是旧版本, 旧版本一般是考虑通用性;, 即符号加密, 但是大多数的开发并不是很了解符号加密规则;的语法指定符号, 这样就可以将这些符号按照。只能一个, 没有报错, 多了也报错;, 因为只能一个, 多了编译报错;对应的旧版本符号, 而不是最新;记录编译时使用的符号版本;原创 2023-04-18 12:08:05 · 601 阅读 · 0 评论 -
什么是 metaprogramming
metaprogramming原创 2022-11-12 18:08:29 · 234 阅读 · 0 评论 -
编译阶段输出宏定义的值
预编译阶段就可以判断是否编译某代码原创 2022-10-27 21:25:56 · 360 阅读 · 0 评论 -
thread_local
thread_local原创 2022-10-27 21:23:16 · 71 阅读 · 0 评论 -
获取表达式长度
#define GET_MACRO_LEN(MACRO) (sizeof(#MACRO) - 1)int main() {int n = GET_MACRO_LEN(TEST);}原创 2022-01-08 08:36:19 · 153 阅读 · 0 评论 -
获取线程在CPU的执行时间
总览说明通过linux下的接口实现.参考man7案例代码#include<pthread.h>#include<stdio.h>#include<time.h>#include<unistd.h>int main() { clockid_t st; struct timespec ts,te; if(pthread_getcpuclockid(pth..原创 2022-01-05 11:12:01 · 946 阅读 · 0 评论 -
C代码调用template的函数
来个常规源码[root@localhost design]# ./a.out1[root@localhost design]# cat dd.cpp#include<iostream>template <typename T>void show(T a) { std::cout << a << std::endl;}int main(){ show(1);}指令反编译一下# objdump -d a.out00原创 2021-12-05 18:27:23 · 325 阅读 · 0 评论 -
站在C的角度上学习C++
如何学习C++个人理解没什么不一样,就是编译器不一样。编译器就是个字符串解析器,支持C++语法而已。怎么理解后面从C的角度上来学习,会涉及到一些编译后的符号,即函数名的说明。符号函数名,用linux 的 objdump查看.符号加密规则https://itanium-cxx-abi.github.io/cxx-abi/abi.html#manglingdlsym用名字找一个函数.-ldl依赖库.-r..原创 2021-12-03 23:16:11 · 455 阅读 · 0 评论 -
android backtrace实现
backtrace简介有的系统没有实现backtrace这个函数.常见的就有linux还有一些docker的库.判断是否支持backtrace#include<stdio.h>#include<dlfcn.h>int main(){ void * bt = dlsym(NULL,"backtrace"); if(NULL != bt) { printf("support\n"); } else ..原创 2021-09-15 09:12:52 · 1096 阅读 · 0 评论 -
C++模板和重载的简单理解
说明角度从编译的角度介绍模板和重载.符号唯一默认的函数都是强符号,和global,除非显式指定.C++重载重载概念函数参数不一样,函数名一样.编译器保证唯一可执行文件对于符号(函数或变量)解析,一般要求全局唯一.不能有两个一样的,否则就产生了二义性,二义性在程序中是不允许存在的.怎么做到的呢?回顾重载的亮点:函数参数不一样,函数名一样.C++的编译器则是对符号进行了魔改.代码void s..原创 2021-07-31 11:23:21 · 284 阅读 · 0 评论 -
内存屏障简单理解
内存缓存缓存数据每个线程使用处理器进行计算的时候,都会将一些需要的数据放入缓存.适用场景每个线程只操作自己的数据,即线程内的局部变量是没有问题的。但是如果是操作全局变量,这种共享数据,就造成了两个核心的高速缓存在两个处理器缓存中都有一份,修改就需要保证一致性问题。多线程修改全局变量数据结果错误因为多线程之间的缓存不一致。处理器提供的缓存一致处理方式对数据读取的时候,处理器发送invalidate消息给其他处理器。操...原创 2020-12-20 13:18:29 · 207 阅读 · 0 评论 -
几种常用C/C++宏定义
一对一代码#define WORD others说明是一对一不变的替换。从定义区间开始搜索,一对一字符串替换。others有时候看起来都不像是单词。字符串格式#define WORD2STR(param) #param说明将param的内容转化为字符串。宏定义程序编译的第一阶段,也是原样转换,不会处理运行时值。比如WORD2STR(aaa)得到的是"aaa".函数定参代码#define f..原创 2020-12-14 23:26:41 · 221 阅读 · 0 评论