C++
文章平均质量分 56
线上幽灵
大道至简
展开
-
斐波那契数列
斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项,初始状态f(1) = 1, f(2) = 1, 函数的状态转移问题:f(n) = f(n-1) + f(n-2)。转载 2024-02-04 17:41:13 · 78 阅读 · 0 评论 -
C++ 返回值优化RVO
C++的返回值优化(Return Value Optimization,也被称为RVO)是一个重要的优化技术,可以提高程序的性能。返回值优化(RVO)是指编译器对临时变量的处理机制。对于函数返回一个对象的情况,编译器在生成代码时会按照以下规则进行优化:1.如果返回值是一个非静态局部变量,并且该变量是通过复制返回(Return by Value)方式返回的,编译器会尝试将该返回值直接构造在调用方的返回值处,而不是返回一个副本。转载 2023-12-02 20:48:22 · 858 阅读 · 0 评论 -
C++11中的内存模型
sequenced-before用于表示中,两个操作上的先后顺序,这个顺序是非对称、可以进行传递的关系。它不仅仅表示两个操作之间的先后顺序,还表示了操作结果之间的可见性关系。两个操作A和操作B,如果有A sequenced-before B,除了表示操作A的顺序在B之前,还表示了操作A的结果操作B可见。原创 2023-08-03 16:59:44 · 591 阅读 · 0 评论 -
bazel 条件编译选择不同的库
注意这个只是模版,由于缺少好多库,导致brpc编译不过。通过define选择用grpc还是brpc。原创 2023-07-04 11:17:34 · 857 阅读 · 0 评论 -
使用pprof分析在线服务cpu性能
先看$GOPATH/bin下面有没有pprof,用这个pprof的bin文件将系统里的pprof替换掉。执行此命令不用在your_bin运行镜像下执行,直接在pprof安装环境下执行即可。这个是由于go版本太低导致的,将go版本升级到1.17以上,可以是1.17版本。说明pprof版本过低,或者安装的最新版本没有将系统的pprof替换掉。将生成的perf_to_profile放在PATH下面,比如。命令查找安装的pprof安装哪去了,一般是放在。这个,那么就的执行下面命令。这个文件下,如果放在。原创 2023-06-27 18:10:54 · 662 阅读 · 0 评论 -
Doxygen工具简单使用
Doxygen是一款非常方便的文档生成工具,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java等语言,据说也支持python等。不仅可以根据注释生成文档,而且还能利用graphviz工具生成类图以及类中的函数调用关系,并且支持html、latex、rtf等格式的输出。原创 2023-06-26 12:53:44 · 1437 阅读 · 0 评论 -
使用jemalloc检测内存泄露
/jemalloc-5.3.0/bin/jeprof --show_bytes --svg ${服务二进制名} ${heap文件名} > out.svg。由于要生成jeprof工具,所以要在autogen.sh文件中-configure后面-enable-prof参数。./autogen.sh 在这个文件里面加上-configure后面-enable-prof参数。生成的jeprof工具在jemalloc-5.3.0/bin/文件夹中。可以在编译的时候将-g换成-pg。如果生成svg时,报下面错误。原创 2023-03-14 20:51:51 · 2909 阅读 · 1 评论 -
使用 gperftools 检测内存泄露
gperftools 是 google 开源的一组套件,提供了高性能的、支持多线程的 malloc 实现,以及一组优秀的性能分析工具。原创 2023-03-14 20:48:53 · 1818 阅读 · 0 评论 -
使用 gperftools 分析程序cpu性能
gperftools 是 google 开源的一组套件,提供了高性能的、支持多线程的 malloc 实现,以及一组优秀的性能分析工具。从 gperftools github 官网上下载最新版本的源码包:命令结束执行后出现一个报错:这是因为没有安装 。这里直接使用 yum 的方式安装:再次执行 ,命令执行成功。执行如下两个命令,进行编译并安装:最后执行 更新动态库文件执行如下命令,确认 gperftools 安装成功三、示例3.1 demo3.2 编译,并链接profiler库3.3 运行p原创 2022-12-07 08:51:30 · 1187 阅读 · 0 评论 -
C++实现LRU cache
C++实现LRU cache转载 2022-10-25 08:39:10 · 407 阅读 · 0 评论 -
插入、希尔、冒泡、快速、选择、堆、归并排序算法和性质
插入、希尔、冒泡、快速、选择、堆、归并排序算法和性质。原创 2018-10-09 10:08:30 · 941 阅读 · 0 评论 -
C++获取linux时间戳
C++获取linux时间戳原创 2022-07-14 08:35:36 · 920 阅读 · 0 评论 -
AddressSanitizer简单教程
AddressSanitizer简单教程原创 2022-07-03 19:05:03 · 1383 阅读 · 0 评论 -
dmesg和addr2line命令定位段错误
没有core文件下,通过dmesg、addr2line命令定位段错误原创 2022-07-02 09:03:13 · 1025 阅读 · 0 评论 -
core文件特别大原因分析
服务发生core了,发现产生的core文件达到了几百G,而一般发生的core,不应该这样大的原创 2022-06-23 09:15:06 · 3544 阅读 · 0 评论 -
bazel使用教程
0、简介bazel的所有代码都在当前工程,每个工程都是一个 WORKSPACE。每个WORKSPACE下有多个package(包含BUILD文件的文件夹被称为package),BUILD内是多个targets,同一个package内的targets默认互相可见,不同package之间targets的可见性需要手动定义,可以在每个package的BUILD文件顶部声明其中的targets对其他包的默认可见性。一、安装bazel参考:Installing Bazel on Ubuntusudo apt转载 2022-05-02 09:41:06 · 1969 阅读 · 0 评论 -
Bazel教程
一、传送门Bazel入门:编译C++项目Bazel学习笔记转载 2021-01-16 15:55:19 · 855 阅读 · 0 评论 -
centos7安装bazel
一、生成vbatts-bazel-epel-7.repo文件[copr:copr.fedorainfracloud.org:vbatts:bazel]name=Copr repo for bazel owned by vbattsbaseurl=https://download.copr.fedorainfracloud.org/results/vbatts/bazel/epel-7-$basearch/type=rpm-mdskip_if_unavailable=Truegpgcheck=1原创 2021-01-16 11:46:09 · 1230 阅读 · 0 评论 -
Centos 上将gcc和g++升级到8以上版本
以安装gcc 8版本为例第一步yum install centos-release-scl然后用这个下面命令可以查看能安装的版本yum list dev\*gcc //用于查看可以安装的版本第二步yum install devtoolset-8-gcc.x86_64第三步source /opt/rh/devtoolset-8/enable第四步gcc -v第三步只是临时生效,如果想一直生效,执行下面命令echo "source /opt/rh/devtoolset-8/原创 2020-11-20 17:45:57 · 8493 阅读 · 3 评论 -
在C++中使用openmp进行多线程编程
一、前言多线程在实际的编程中的重要性不言而喻。对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始支持的std::thread,也可以使用操作系统相关的线程API,如在Linux上,可以使用pthread库。除此之外,还可以使用omp来使用多线程。它的好处是跨平台,使用简单。在Linux平台上,如果需要使用omp,只需在编译时使用"-fopenmp"指令。在Windows的visual studio开发环境中,开启omp支持的步骤为“项目属性 ->转载 2020-07-16 23:10:20 · 7251 阅读 · 0 评论 -
Intel 内部指令---AVX编程基础
AVX编程基础一、数据类型数据类型描述__m128包含4个float类型数字的向量__m128d包含2个double类型数字的向量__m128i包含若干个整型数字的向量__m256包含8个float类型数字的向量__m256d包含4个double类型数字的向量__m256i包含若干个整型数字的向量每一种类型,从2个下划线开头...转载 2020-05-05 17:00:38 · 5939 阅读 · 0 评论 -
boost--program_options 用法详解
简介program options是一系列pair组成的选项列表,它允许程序通过命令行或配置文件来读取这些参数选项.主要组件program_options的使用主要通过下面三个组件完成:组件名作用options_description(选项描述器)描述当前的程序定义了哪些选项parse_command_line(选项分析器)解析由命令行输入的参数va...转载 2020-04-12 23:45:41 · 2050 阅读 · 0 评论 -
Linux下make、cmake指定安装目录
一、Linux下make编译软件时指定安装目录1、 源码的安装步骤源码的安装一般由3个步骤组成:**1). 配置(configure)、2). 编译(make)、3). 安装(make install)。**2、 ./configure --prefix=/usr/local/testConfigure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configu...转载 2019-11-18 19:54:53 · 10014 阅读 · 0 评论 -
C++学习:回调函数(callback)
简介:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应可能这些概念性的东西不是太好理解,通俗一点,回调函数就是在两个独立函数或者独立类通信的通道举个例子:财务处是负责对公司财务...转载 2019-11-16 22:44:37 · 1197 阅读 · 0 评论 -
用VS编写第一个C++程序
#include using namespace std;int main(){ int a, b, c; cout << "100-1000之间所有水仙花:" << endl; for (int i = 100; i <= 999; i++) { a = i / 100; b = i % 100 / 10; c = i % 10; if (a*a*a + b*b*转载 2017-07-24 15:02:03 · 1083 阅读 · 0 评论 -
用Qt编写带有C++11标准的程序
用Qt编写带有C++11新标准的程序时,要在.pro文件里加上下面一句话,否则编译不通过!原创 2017-07-25 17:46:06 · 1849 阅读 · 0 评论 -
Visual Studio 2015简体中文企业版/专业版下载地址和激活密钥
Visual Studio 2015是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft S原创 2017-07-26 13:53:11 · 3374 阅读 · 0 评论 -
值得推荐的C/C++框架和库
此文章转载自:https://www.ezlippi.com/blog/2014/12/c-open-project.htmlWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到6转载 2017-08-24 16:06:32 · 506 阅读 · 0 评论 -
Visual Studio 运行程序时,结果画面为什么会一闪而过?
在VS里的控制台应用程序在运行时,结果画面一闪而过,不管是用F5 还是用Ctrl + F5都是一样,导致无法看到结果。 网上有不少的办法,说是都是在程序最后加一个要程序暂停的语句或从控制台上获取用户输入的语句。其实还有一个更好的解决办法:在你的项目条目(project)上右击鼠标,在弹出菜单上选择最后一项“property/属性”,在左边的一栏里找到“配置属性->链接器->系统”,点击原创 2017-09-25 08:42:33 · 7610 阅读 · 0 评论 -
Linux 环境下使用g++编译C++
此文章转载自:http://blog.csdn.net/hnyzwtf/article/details/44674145单个源文件生成可执行程序下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:/* helloworld.cpp */#include int main(int argc,char *argv[]){转载 2017-09-02 18:47:32 · 248 阅读 · 0 评论 -
C++中为何每次使用strcpy()总会出现警告?
在代码的开头加 #define _CRT_SECURE_NO_WARNINGS 一定要加在代码的第一行,否则还会出现警告!原创 2017-10-08 20:04:17 · 2318 阅读 · 1 评论 -
c++中字符数组与字符串的转换
此文章转载自http://blog.csdn.net/xinwang24/article/details/6612686 1:字符数组换为字符串见代码#include <iostream>#include <string>using namespace std; int main(){ char a[10]="aaaabbbba"; strin...转载 2017-10-04 09:43:02 · 10823 阅读 · 2 评论 -
C++中vector作为参数的三种传参方式
此文章转载自:http://www.cnblogs.com/xiaoxi666/p/6843211.htmlc++中常用的vector容器作为参数时,有三种传参方式,分别如下(为说明问题,用二维vector):function1(std::vectorstd::vectorint> > vec),传值function2(std::vectorstd::vectorint> >&转载 2017-11-08 18:06:05 · 9016 阅读 · 0 评论 -
C/C++中字符串与数值相互转换
数字转换成字符串:#include #include #include using namespace std;string num2str(double i){ stringstream ss; ss << i; return ss.str();}int main(){ double x = 965.3; string s = num2str(x); cou原创 2017-10-25 20:06:22 · 3042 阅读 · 0 评论 -
Visual Studio Warning C4996
此文章转载自:http://blog.csdn.net/tan6600/article/details/43087167将过去的工程用VS新版本打开的时候。你有可能会遇到一大堆的警告:warning C4996。比如:warning C4996: 'sprintf': This function or variable may be unsafe. Consider using s转载 2017-10-26 15:57:50 · 424 阅读 · 0 评论 -
如何在Visual Studio 2010中使用C++“准”标准库 Boost 1.49.0
此文章转载自:http://blog.csdn.net/fanic1993/article/details/7532848关于Boost的盛名我就不多费口舌了,它是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已经有好几转载 2017-10-26 15:59:35 · 935 阅读 · 0 评论 -
C++中如何split字符串
此文章转载自:http://blog.sina.com.cn/s/blog_48d4cf2d0100r9hv.html 毫无疑问,split应该是任何非反人类的标准库编写者都应该提供的功能,因为实在是太常用了。但是不幸的是C++中的string并未提供此功能。诚然实现此功能不难,但为何老是要程序员重复造轮子? 好在boost里提供了几种split字符串的转载 2017-10-26 16:28:28 · 578 阅读 · 0 评论 -
C++编程求三角形角平分线与对边的交点坐标
问题:设ABC三点,形成三角形,求角平分线与AC的交点坐标(x', y')方案:1. 已知两点求直线方程:A(x1,y1), B(x2,y2),求直线Line(A-B)的一般直线方程ax + by + c =0设b=1,使用y=kx+n转换{-kx + y + (-n)=0;}a=-(y2-y1)/(x2-x1)c=-(x2y1-x1y2)/(x2-原创 2017-12-09 12:43:10 · 5077 阅读 · 1 评论 -
C++程序,产生随机数
产生一定范围随机数的通用表示公式 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;;要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;通用公式:a + rand() % n;其中的a是起始值,n是整数的范围;要取得a到b之间的随机整数,另一种表示:a原创 2017-12-02 17:15:25 · 708 阅读 · 0 评论 -
C++ vector多维数组初始化及清零
此文章转载自:http://www.cnblogs.com/wei-li/archive/2012/06/08/2541576.htmlvector常用方法assign() 对Vector中的元素赋值void assign( input_iterator start, input_iterator end ); //void assign( size_type转载 2017-12-27 16:54:10 · 2869 阅读 · 0 评论