
C/C++
随笔
「已注销」
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
什么是 metaprogramming
metaprogramming原创 2022-11-12 18:08:29 · 269 阅读 · 0 评论 -
编译阶段输出宏定义的值
预编译阶段就可以判断是否编译某代码原创 2022-10-27 21:25:56 · 605 阅读 · 0 评论 -
thread_local
thread_local原创 2022-10-27 21:23:16 · 113 阅读 · 0 评论 -
获取表达式长度
#define GET_MACRO_LEN(MACRO) (sizeof(#MACRO) - 1)int main() {int n = GET_MACRO_LEN(TEST);}原创 2022-01-08 08:36:19 · 180 阅读 · 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 · 1163 阅读 · 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 · 367 阅读 · 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 · 482 阅读 · 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 · 1312 阅读 · 0 评论 -
C++模板和重载的简单理解
说明角度从编译的角度介绍模板和重载.符号唯一默认的函数都是强符号,和global,除非显式指定.C++重载重载概念函数参数不一样,函数名一样.编译器保证唯一可执行文件对于符号(函数或变量)解析,一般要求全局唯一.不能有两个一样的,否则就产生了二义性,二义性在程序中是不允许存在的.怎么做到的呢?回顾重载的亮点:函数参数不一样,函数名一样.C++的编译器则是对符号进行了魔改.代码void s..原创 2021-07-31 11:23:21 · 340 阅读 · 0 评论 -
内存屏障简单理解
内存缓存缓存数据每个线程使用处理器进行计算的时候,都会将一些需要的数据放入缓存.适用场景每个线程只操作自己的数据,即线程内的局部变量是没有问题的。但是如果是操作全局变量,这种共享数据,就造成了两个核心的高速缓存在两个处理器缓存中都有一份,修改就需要保证一致性问题。多线程修改全局变量数据结果错误因为多线程之间的缓存不一致。处理器提供的缓存一致处理方式对数据读取的时候,处理器发送invalidate消息给其他处理器。操...原创 2020-12-20 13:18:29 · 274 阅读 · 0 评论 -
几种常用C/C++宏定义
一对一代码#define WORD others说明是一对一不变的替换。从定义区间开始搜索,一对一字符串替换。others有时候看起来都不像是单词。字符串格式#define WORD2STR(param) #param说明将param的内容转化为字符串。宏定义程序编译的第一阶段,也是原样转换,不会处理运行时值。比如WORD2STR(aaa)得到的是"aaa".函数定参代码#define f..原创 2020-12-14 23:26:41 · 290 阅读 · 0 评论