
C/C++技术
文章平均质量分 85
杰特JET
这个作者很懒,什么都没留下…
展开
-
C++右值引用和完美转发
C++右值引用和完美转发何为引用引用必须是左值右值引用完美转发move()使用move的优点move 左值测试move 右值测试注意参考链接看到有些同学,调用函数的时候总喜欢使用std::move希望避免一些开销,而实际上由于他并不理解什么是右值引用、完美转发,导致这种努力成为了徒劳,反增笑柄。本文为记录我学习右值引用和完美转发的笔记。何为引用C++新增了一种复合类型,也就是引用变量。通过引用,就可以使用该引用名称或变量名称来指向变量。引用必须是左值对于对象的引用必须是左值(常量引用除外)原创 2021-05-25 18:19:55 · 603 阅读 · 0 评论 -
C++使用StringPiece减少string类的拷贝
C++使用StringPiece减少string类的拷贝构造函数操作字符串比较Traits参考链接使用c++ string类不可避免会带来很多不必要的拷贝,拷贝多了必然影响性能。因此在很多高性能C++框架的实现中,都会使用StringPiece类作为string类的wrapper,该类只持有目标字符串的指针,而避免额外的拷贝,比较常见的实现有:muduo实际上是使用了pcre的StringPiece的实现ChromiumChromium也说明了引入StringPiece的意义,主要是为了免拷贝原创 2021-05-25 15:59:12 · 2313 阅读 · 0 评论 -
深入理解Memory Order
深入理解Memory Ordercpu 保证cache编程技术lock-freewait-freeRead–modify–writeCompare-And-Swap(CAS)cas原理cas开销test-and-setconsensus memberwait-freeABA problemmemory order背景知识延伸:`__asm volatile("" ::: "memory")`的含义memory modelC++ atomicmemory_ordermemory_order_relaxedme原创 2021-04-28 10:14:19 · 2181 阅读 · 2 评论 -
c++的线程安全静态检查
在阅读leveldb源码的过程中,发现很多成员变量被GUARDED_BY修饰,如下:struct IterState { port::Mutex* const mu; Version* const version GUARDED_BY(mu); MemTable* const mem GUARDED_BY(mu); MemTable* const imm GUARDED_BY(mu); IterState(port::Mutex* mutex, MemTable* mem, MemT原创 2021-04-21 16:55:23 · 1090 阅读 · 0 评论 -
DPDK精准测量时间
DPDK精准测量时间DPDK实现方式实际操作参考链接DPDK实现方式简单来说就是通过rdtsc指令来获取CPU启动起来的tick值,进行减法,然后结合频率来得到时间差。对应到spdk里面的话就是spdk_get_ticks和spdk_get_ticks_hz. spdk_get_ticks最终会调用到rte_rdtsc,其实现如下://dpdk/lib/librte_eal/common/include/arch/x86/rte_cycles.hstatic inline uint64_trt原创 2021-04-17 12:35:34 · 2873 阅读 · 0 评论 -
linux信号以及core
linux信号以及core何为信号信号(signal)用于通知进程发生了某种情况。进程有以下3种处理信号的方式:忽略信号。有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的存储单元等,因为这些异常产生的后果不确定,所以不推荐使用这种处理>方式。按系统默认方式处理。对除数为0,系统默认方式是终止进程。提供一个函数,信号发生时调用该函数,这被称为捕抓该信号。通过提供自编的函数,我们就能知道什么时候产生了信号,并按期望的方式处理它。以上摘自《APUE》中文版14页信号类型[r原创 2020-12-11 14:02:17 · 789 阅读 · 0 评论 -
zookeeper简介以及C客户端用法
zookeeper简介以及C客户端用法前言简介zookeeper保证理解zookeeper的顺序一致性zookeeper 接口安装zoo.cfg参数详解常用命令C APIzookeeper C API如何在代码中使用zk C APIzookeeper引用计数zookeeper节点类型zookeeper集群ZooKeeper典型使用场景zk c client 连接流程zk 状态转换连接中的异常应对记一次线上事故参考链接前言zookeeper用法有很多,但是针对C++的工具集和文档却很少,本文主要介绍zk原创 2020-12-14 13:25:55 · 2014 阅读 · 0 评论 -
从C++20 shared_ptr移除unique()方法浅析多线程同步
@[TOC](从C++20 shared_ptr移除unique()方法浅析多线程同步)std::shared_ptr的unique()方法做了什么事情?unique()作为std::shared_ptr的成员函数,它检查当前shared_ptr持有的对象,是不是该对象的唯一持有者。也就是说检查shard_ptr的引用计数是否为1。大概的实现如下bool unique() { return this->use_count() == 1;}工程上我曾用它来管控对象的所有权。如:多个原创 2020-12-16 11:58:55 · 651 阅读 · 0 评论 -
linux的链接库
linux的链接库概述静态链接库共享函数库动态加载函数库如何指定链接的是动态库还是静态库?链接库的顺序静态库链接问题gcc链接参数库链接参数`--whole-archive``--no-whole-archive``--wrap``–start-group` `--end-group`ldcc动态链接库参考链接概述程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded librari原创 2021-03-24 16:37:23 · 871 阅读 · 1 评论 -
gdb常用命令及参考文档
gdb常用命令及参考文档前言使能方式启动方式常用命令!helpprocl/listb、break + line 或者函数名break-ifdelete、 clearinfor/runns/stepp/print打印数组setfinishc/continuekillfilewatchstartdisplay/dispcatchx技巧backtrace/btframe/fargs信号调试多线程调试attachcoredump 文件开始调试core文件使用gdb dump内存gdb读取内存使用gdb打印栈帧参考链原创 2021-03-24 16:34:47 · 498 阅读 · 1 评论 -
C/C++多个链接库含有同名函数,编译会报错吗
C/C++多个链接库含有同名函数,编译会报错吗起因基本概念同名函数测试测试1:`.o`目标文件测试2:静态库测试3:动态库同名函数的应用起因由于业务需要,我司使用了Mellanox某闭源C++程序,Mellanox推荐的定制化开发方法是:对其链接的动态库进行定制化开发,以添加额外的功能。在方案讨论阶段,发现很多同事对动态库/静态库所代表的的含义并不十分清楚,特别是当同名函数存在时,编译、链接、运行的结果是什么也没有明确的认识,故写下这篇文章。基本概念程序函数库可分为下面几种类型:静态函数库(原创 2021-03-24 15:24:28 · 5776 阅读 · 0 评论