
C/C++
文章平均质量分 50
LinuxG_G
90年程序员,坐标深圳某IT公司。对新技术充满兴趣,使用的编程语言:C/C++,python, Linux shell;
熟悉常见数据结构及算法,Linux编程,了解java,Android开发。
技能库:
STL, python, 多线程编程, TCP/IP, Linux shell
java, android, 数据库
爱好运动,兴趣比较广泛:basketball,badminton,swim,running等
博客主要用Github 及 csdn,欢迎交流。
联系方式:qq 754860961
展开
-
性能优化好文推荐
性能优化好文推荐原创 2023-02-06 11:18:28 · 363 阅读 · 0 评论 -
【好文推荐】C++内存问题,看这篇就够了
C++内存问题,看这篇就够了原创 2022-09-07 22:10:57 · 327 阅读 · 0 评论 -
【转】浅谈C++ Executor
浅谈The C++ Executors - 知乎原创 2022-06-01 15:22:36 · 1203 阅读 · 0 评论 -
c++17 pmr
收藏几篇c++17 pmr的文章:[C++17 Polymorphic Memory Resources (pmr) and STL Containers for Embedded Applications](https://www.rkaiser.de/wp-content/uploads/2021/03/embo2021-pmr-STL-for-Embedded-Applications-en.pdf)[游戏引擎开发新感觉!(6) c++17内存管理](https://www.rkaiser.d原创 2022-03-27 23:15:30 · 5221 阅读 · 0 评论 -
c++再探string之eager-copy、COW和SSO方案
转载自[c++再探string之eager-copy、COW和SSO方案 - CTHON - 博客园](https://www.cnblogs.com/cthon/p/9181979.html)原创 2022-01-17 10:36:26 · 453 阅读 · 0 评论 -
单元测试中关闭访问控制
单测中建议都使用编译参数 -fno-access-control 关闭访问控制,而不是#define private publicC++ 单元测试 访问控制小坑原创 2021-12-17 14:49:32 · 351 阅读 · 0 评论 -
内存管理方面的一些好文推荐
CPU中的cache结构以及cache一致性ptmalloc、tcmalloc与jemalloc对比分析百度C++工程师的那些极限优化(内存篇)原创 2021-11-11 15:17:58 · 671 阅读 · 0 评论 -
ptmalloc、tcmalloc与jemalloc对比分析
转载自[ptmalloc、tcmalloc与jemalloc对比分析](https://www.cyningsun.com/07-07-2018/memory-allocator-contrasts.html)背景介绍在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低。但在晚上高峰时期,在CPU刚刚超过50%之后却出现了指数上升,服务在几分钟之内不可用。最终定位到是tcmalloc在内存分配的时候使用转载 2021-11-04 14:42:24 · 706 阅读 · 0 评论 -
shared_ptr和unique_ptr对性能的影响
shared_ptr内部引用计数对象要通过new创建,这样所有的对象才能指向同一个引用计数变量;由于调用make_shared要调用两次new,所以有一定的性能开销。unique_ptr由于不需要存储引用计数,对象的所有权通过reset和release进行过渡。调用make_unique只要调用一次new,所以有着接近原生指针的性能。但unique_ptr指向的对象不能共享,所以在有时候要求对象要共享又对性能有要求时,使用继承引用计数基类的方式来实现share,这时要求需要shared的类必须继承引用计原创 2021-09-21 19:21:36 · 1955 阅读 · 0 评论 -
【转】基于Linux内核的时间轮算法设计实现【附代码】
首先声明,本文内容参考了以下博客文章,向这三篇文章的作者表示感谢。https://www.cnblogs.com/arnoldlu/p/7078262.html https://blog.youkuaiyun.com/HELPLEE601276804/article/details/36717979 https://www.cnblogs.com/lsgxeva/p/8072468.html1. 时间轮算法基本思想对于一个复杂的软件系统,定时器的对任务的管理和调度至关重要,通常定时器的管理已成为一转载 2021-08-29 10:14:08 · 531 阅读 · 0 评论 -
seastar
Seastar is an advanced, open-source C++ framework for high-performance server applications on modern hardware. Seastar is used in Scylla, a high-performance NoSQL database compatible with Apache Cassandra. Applications using Seastar can run on Linux or OSv原创 2021-08-20 14:58:11 · 240 阅读 · 0 评论 -
C++11~C++17的新特性
函数调用:call_once(c++11):https://en.cppreference.com/w/cpp/thread/call_oncestd::invoke(c++17), std::apply(c++17)内存管理:std::destroy_at(c++17), std::launder(c++17)泛型:std::all_of,std::any_of,std::none_ofstd::is_convertible_vstd::is_copy_construc...原创 2021-08-15 22:56:22 · 462 阅读 · 0 评论 -
高效内存分配:tcmalloc和jemalloc
timer实现https://cloud.tencent.com/developer/article/1553274原创 2021-08-14 10:43:20 · 402 阅读 · 0 评论 -
C++可变参数模板特化
项目中使用了可变参数模板,需要特化出一个带固定参数个数的实现,以提升效率,下面是参考的一些文章,先mark下,后面做个介绍和总结。文章列表:泛化之美–C++11可变模版参数的妙用C++11模版元编程的应用function_traits...原创 2021-03-29 09:19:58 · 644 阅读 · 0 评论 -
谈谈性能优化
性能指标API接口:每次调用耗时 或 QPS网络服务端: Throughput (吞吐,即QPS)+ Latency (调用延迟)性能测量的方法性能分析工具:如c++下有perf/gprof,go下有pprof使用这类工具可以帮你发现性能瓶颈时间测量:通过使用时间测量方式来看程序执行发了多少时间Linux下常用的有clock_gettime, gettimeofday等命令,获取起止时间后相减即可,亦可将其包装为一个timer类,然后插入程序代码段中来测量常见的性能优化方法性能优化本质原创 2021-03-21 18:16:12 · 222 阅读 · 0 评论 -
彻底弄懂EPOLLOUT事件
epoll是linux下实现IO multiplex的利器。一般编程实现方式如下:使用epoll_create创建一个epoll fd使用epoll_ctl往epoll fd里添加需要监听的fd,并注册需要监听的事件(由于EPOLLLET边缘触发方式更加高效,所以一般都使用边缘触发方式)使用epoll_wait等待事件,然后依次处理各个事件,反复循环其最常用的网络事件为EPOLLIN和EPOLLOUT,EPOLLIN对应为有socket缓冲区数据可读(当又收到了对端的一些数据,就会触发;或者作为原创 2021-03-21 12:16:02 · 10064 阅读 · 2 评论 -
【转】现代c++开发利器folly教程系列之:future/promise
一、前言 promise/future是一个非常重要的异步编程模型,它可以让我们摆脱传统的回调陷阱,从而使用更加优雅、清晰的方式进行异步编程。c++11中已经开始支持std::future/std::promise,那么为什么folly还要提供自己的一套实现呢?原因是c++标准提供的future过于简单,而folly的实现中最大的改进就是可以为future添加回调函数(比如then),这样可以方便的链式调用,从而写出更加优雅、简洁的代码,然后,改进还不仅仅如此。二、入门实例 ...转载 2020-10-11 20:25:52 · 2317 阅读 · 0 评论 -
【转】编译构建工具-bazel
简介 bazel是Google开源的一套类似于Make的编译构建工具。 运作原理 运行构建或测试时,Bazel执行以下操作 加载BUILD与目标相关的文件。 分析输入及其依赖关系,应用指定的构建规则。并生产action图 对输入执行构建操作,直到生成最终构建输出。 action图表示各个构建输入和他们之间的关系,以及Bazel将执行的构建操作。 优点 构建快。支持增量编译, 对依赖关系进行了优化,从而支持并发执行。 可构建多种语言。..转载 2020-06-06 22:04:38 · 3213 阅读 · 0 评论 -
火焰图分析程序性能
perf + 火焰图分析程序性能如何读懂火焰图?Linux 性能诊断 perf使用指南原创 2020-05-31 15:57:56 · 298 阅读 · 1 评论 -
关联容器中“相等”与“等价”的区别及注意事项
STL对于set/map这类关联容器,涉及到插入和查找操作。由于set/map是有序的,插入(insert)操作就需要根据key的大小进行排序,实现中使用了operator < 用于比较key大小; 其成员函数find操作也是基于operator <来找到给定的元素。我们称之为“等价”。而<alogrithm> 中的find函数则不然:因为find算法针对的是普通的前向迭...原创 2020-03-22 22:17:06 · 515 阅读 · 0 评论 -
Linux epoll详解
文章目录epoll接口函数创建epoll实例管理epoll事件等待epoll事件epoll实例mac下的epollepoll源码实现epoll机制相比select/poll机制能更有效地实现描述符的多路复用(支持更多的描述符,处理效率更高[具体机制这边不展开了]),本文从编程的角度做一个介绍。epoll接口函数头文件: #include<sys/epoll.h>可以通过man ...原创 2020-03-01 14:50:15 · 1582 阅读 · 0 评论 -
[转]C++的性能优化实践
C++的性能优化实践内容目录:1 Gprof 2. gprof使用步骤 1.初始化大对象耗时 2.Map使用不当优化准则:1. 二八法则:在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的;在优化实践中,我们将精力集中在优化那20%最耗时的代码上,整体性能将有显著的提升;这个很好理解。函数A虽然代码量大,但在一次正常执行流程中,只调用了一次...转载 2020-02-23 18:21:13 · 322 阅读 · 0 评论 -
Google代码风格
https://google.github.io/styleguide/c++:https://google.github.io/styleguide/cppguide.html原创 2020-02-22 22:59:41 · 305 阅读 · 0 评论 -
popen和system函数的区别 以及 popen打开的FILE指针能否用close替代fclose关闭
popen和system函数的区别在c/cpp中执行shell命令,通常有两种方式,一种是popen,一种是system;其原理是两者调用fork函数从父进程中fork出一个子进程,然后在子进程中执行shell命令,其主要的区别如下:popenpopen会先fork一个子进程,然后子进程去执行shell命令,函数同时返回一个FILE指针给调用者,调用者可以根据FILE指针来获取函数的执行结...原创 2020-02-16 18:58:54 · 1817 阅读 · 0 评论 -
[转]性能调优攻略
声明:本文转载自https://coolshell.cn/articles/7490.html关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充。在开始这篇文章之前,大家可以移...转载 2020-01-19 11:31:06 · 354 阅读 · 0 评论 -
system函数和fork-exec机制
system函数使用man system查看帮助如下:NAME system -execute a shell command SYNOPSIS #include intsystem(const char *command); DESCRIPTION system() executes a comman原创 2015-08-30 16:29:05 · 1451 阅读 · 0 评论 -
c中不定参数情形的处理
不定参数函数的处理 不定参数的情形如:void printMultiParam(int count, ...),对于与C中的printf与scanf等函数都属于这种情形。下边就其原理和处理方式进行说明: 原理:c++参数栈为从高地址向低地址增长,函数参数的入栈顺序为从右到左(即右边参数在高地址空间)。原创 2015-05-23 15:59:22 · 510 阅读 · 0 评论 -
getopt 用法
getopt函数用于解析命令行参数,如经常用到带选项的输入,如netstat –n / find –name filename 等等。下面谈谈其相关内容:包含头文件:unistd.h全局参数:int opterr; //这个变量非零时,getopt()函数为“无效选项”和“缺少参数选项,并输出其错误信息。char *optarg; //跟在带参数的选项后面的参数,如上面的filen原创 2015-08-02 18:21:15 · 474 阅读 · 0 评论 -
pthread_create 函数引发的几点思考
pthread_create 函数引发的几点思考1、 syscall(SYS_gettid) 与pthread_self的区别: 一个是系统调用,一个是POSIX定义的内容,两者并不一样,其中gettid常在core文件中看到。两者的值并不一样2、 堆与栈的区别 堆是要自己申请并释放的,系统会回收(对于C++而言,对应于new和delete);但对于栈来说,系统回收原创 2015-07-30 23:09:32 · 532 阅读 · 0 评论 -
获取函数或程序相关的源码
如何获取某个函数或程序源代码:1 百度、google搜索,下载相关的源代码(这个就不说了,下面介绍方法2)2、 gnu网站下载(manual手册和package都能下),搜索相关的包即可下载(www.gnu.org:进入software--> 自由软件目录--> 查找相应的包即可,如libc)还提供了git下载的链接,可以用git clone进行下载。如下图: 问题来了:如原创 2015-10-04 11:50:17 · 491 阅读 · 0 评论 -
POSIX信号量
信号量是一种用于提供不同进程或统一进程间不同线程同步手段的原语,其操作包括P操作(将信号量的值-1)和V操作(将信号量值+1),其典型应用场景为多个生成者和多个消费者的情况,也用于控制多个进程的并发数。POSIX信号量包含两种类型:a) POSIX有名信号量:使用PosixIPC名字标识相关函数:头文件 #include创建:sem_t*sem_open(const ch原创 2015-10-07 23:17:53 · 481 阅读 · 0 评论 -
stl容器中的元素删除方法
STL中元素的删除方法:问题描述:对于容器:container c;要删除其中元素值为1的元素。container为一类容器。1、 连续内存的容器(vector、deque或string)采用erase-remove方法c.erase(remove(c.begin(), c.end(), 1),c.end());对于list而言,这一方法也适用,但方法2更有效调用原创 2015-09-06 22:45:37 · 683 阅读 · 0 评论 -
共享内存
共享内存是IPC形式中最快的方式。一旦将这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不再涉及内核。然而往该共享内存区存放信息或从中取走信息的进程间通常需要某种方式的同步。 实现共享内存的方式:利用mmap函数、使用Posix共享内存区、使用SystemV共享内存区,下面分别介绍。1.1 利用mmap进行内存映射 作用:open文件之后调用mmap把它映射原创 2015-11-22 21:54:02 · 558 阅读 · 0 评论 -
动态库的加载
参考 http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html静态库为程序链接时加载,共享库为程序运行时加载(可以给多个程序共享,多个程序维护一份内存副本);动态链接可以在程序运行过程中的任何时间加载,特别适合在函数中加载一些模块和Plugin扩展模块的场合(需要时才加载,否则不需要)。 加载动态库的相关函数及使用步骤为:通过原创 2016-01-02 21:10:17 · 903 阅读 · 0 评论 -
查找内存泄露的工具 (转)
Windows/Linux下C/C++内存泄露检测工具 文章出处:http://blog.163.com/cp7618@yeah/blog/static/702347772012728105356157/ 转的人多了,原创不知道在哪了一 Window下的内存泄露检测(以VC++环境为例)灵活自由是C语言的一大特色,但这个特色也难以避免的带来一些副作用,比如内存泄露。众转载 2015-12-06 19:52:52 · 753 阅读 · 0 评论 -
字符串处理与string解析
basic_string为何物 当编译string相关的代码出错时,常常会报一堆很长的错,其中会出现basic_string,如果你清楚string的定义,就不足为奇了:template <class _CharT, class _Traits = char_traits, class _Alloc =__STL_DEFAULT_ALLO原创 2016-03-20 22:48:10 · 529 阅读 · 0 评论 -
C语言及shell描述符重定向
1. dup 和dup2函数作用:用来复制文件描述符,经常用来重定向进程的stdin、stdout和stderr。编程中经常会遇到讲标准输出重定向的情况,这可以使用dup2函数来实现,man手册函数定义如下:DUP(2) BSD System Calls Manual DUP(2) NAME dup, dup2 -- dupli原创 2016-07-17 14:59:39 · 1050 阅读 · 0 评论 -
C++11智能指针
C++的内存管理一直是c++程序员的一个痛点,c++98中提供了auto_ptr智能指针用于管理堆对象,但其支持的操作有限(不支持多个指针指向同一个对象,不支持管理堆数组),限制了其应用。c++11标准中引入了boost库的shared_ptr和unique_ptr智能指针用于内存管理,大大方便了动态对象的管理。本文谈谈shared_ptr和unique_ptr的使用。shar...原创 2017-01-24 23:57:57 · 601 阅读 · 0 评论 -
rapidjson使用
文章目录简介使用rapidjson解析json串使用rapidjson构造json串简介Rapidjson is a fast JSON parser/generator for C++ with both SAX/DOM style API.其所有源代码都包含在源码包的include/rapidjson/include目录下,使用时只需要include相应的头文件即可。详细的介绍见rap...原创 2019-01-01 19:48:07 · 903 阅读 · 0 评论 -
jsoncpp使用
jsoncpp简介jsoncp是一个操作json类型的c++库,可用于json串的解析与构造。其优点是语法简单,但是效率不如rapidjson。源码下载链接:open-source-parsers/jsoncppDocumention: JsonCpp documentation安装与使用其中最简单的方法是执行项目根目录中的python脚本,构建头文件和源文件。在安装Python环...原创 2019-01-01 19:49:58 · 1191 阅读 · 0 评论