
C/C++
文章平均质量分 90
C/C++
bandaoyu
这个作者很懒,什么都没留下…
展开
-
【Netty 】Netty 是什么?能做什么?
作者:老钱链接:https://www.zhihu.com/question/24322387/answer/282001188有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器等等。如果你想知道Nginx是怎么写出来的,如果你想知道Tomcat和Jetty是如何实现的,如果你也想实现一个简单的Redis服务器,那都应该好好理解一下Netty,它们高性能的原理都是类似的.原创 2020-11-29 01:44:59 · 506 阅读 · 0 评论 -
【C/C++】Jemalloc + Jeprof内存泄漏分析
需要include jemalloc的头文件并链接jemalloc库: gcc -I/usr/local/jemalloc-5.1.0/include main.c -L/usr/local/jemalloc-5.1.0/lib -ljemalloc。(原文:https://docs.tibco.com/pub/activematrix_businessworks/6.6.1/doc/html/GUID-231E1EFC-EA7C-4072-B0F4-0D92093D3161.html)原创 2024-04-10 01:16:26 · 3396 阅读 · 0 评论 -
【C/C++】freopen 函数和 fopen 函数|标准输入输入写入文件|屏幕输出写入文件
freopen 和 fopen 都是C的标准库函数被包含于C标准库头文件中。fopen就是我们最熟悉的打开一个文件用于写入or读取freopen 是打开一个文件,用于接收输入输出流的数据。原创 2023-01-28 23:36:07 · 18763 阅读 · 1 评论 -
【printf】打印数值、打印二进制、打印十六进制、sprintf
1、数值转成字符:sprintf个函数,如: sprintf(s, "%d", 123); //产生"123"2、字符串转成数值:while(*BandRate='\0') {num=num*10+(*BandRate-'0'); BandRate++; }char test_char[7]={0}; unsigned int cc=60000;...原创 2011-08-01 02:32:57 · 18757 阅读 · 0 评论 -
【指针】指针有效性检测必要性|空指针/无确切类型指针 viod *
题目:已知strcpy函数的原型是:char * strcpy(char * strDest,const char* strSrc);1.不调用库函数,实现strcpy函数。2.解释为什么要返回char *。解说:1.strcpy的实现代码char * strcpy(char * strDest,const char* strSrc...原创 2012-04-01 22:44:42 · 1332 阅读 · 0 评论 -
【结构体】C语言结构体[外部调用]声明|结构体初始化|做参数
1、现在 FRAM.h 文件中声明一个结构体structFRAM_W_ADDR{char end[3];char start[3];};extern struct FRAM_W_ADDRDATA_REC_ADDR;2、在FARM.c文件中定义一个结构体变量structFRAM_W_ADDRDATA_REC_ADD...原创 2012-02-23 23:10:33 · 11795 阅读 · 2 评论 -
【DLL的函数】关于DLL的函数|_declspec(dllimport)
关于DLL的函数:动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function)。导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。输出函数的方法有以下几种:1、传统的方法在模块定义文件的EXPORT部分指定要输入的函数或者变量。语法格......原创 2012-09-24 21:26:53 · 1226 阅读 · 0 评论 -
【C/C++】引号和尖括号的区别|默认include路径配置|头文件应放些什么|static和extern
头文件中应该放些什么2作者:佚名来源:不详 录入:Admin更新时间:2008-8-1719:38:48 点击数:3【字体: 】作为一般规则, 应该把这些东西放入头(.h)文件中:宏定义(预处理#defines)结构、联合和枚举声明typedef声明外部函数声明全局变量......原创 2011-07-30 17:37:17 · 1957 阅读 · 0 评论 -
【gcc】gcc优化等级 -O1 -O2 -O3 -Os -Ofast -Og|gcc关闭优化
一下内容摘自Using the GNU Compiler Collection (GCC)一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的 p命令查看变量的值,改变变量的值等。并且把获取最快的编译速度作为它的目标。当优化标识被启用之后,gcc编译器将会试图改变程序的结构(当然会在保证变换之后的程序与源程序语义等价的前提之下),以满足某些目标,如:代码大小最小或运行速度更快(只不过通常来说,这两个目标是矛盾的,二者不可兼得.转载 2022-03-24 00:03:37 · 18679 阅读 · 0 评论 -
【gcc】高版本gcc编译出的程序在低版本glibc机器上运行
目录1.静态编译(多数场景不行)2.容器发布(部分场景可以使用)3.打包依赖的so发布(通用方案)3.1 方式1 在编译时设置rpath和dynamic linker3.2 方式2 直接修改二进制程序的rpath和interpreter比如我们用gcc 9.3.0编译程序,但需要发布的机器gcc版本是4.8.5,怎么办?你可能想到如下方法静态编译 容器发布 打包依赖的so,使用本地so运行程序1.静态编译(多数场景不行)其中静态编译是行不通的,libstdc++..原创 2021-11-22 18:00:14 · 13256 阅读 · 6 评论 -
【C++】几个有用的 C++ 在线工具
Wandbox支持多种编程语言 * 多个编译器版本在线编译运行的网站。 可以在这里做方便、快速地一些小实验、尝试一些编程语言的新特性,比如 C++20。Quick C++ Benchmark可以快速对一些 C++ 代码片段进行 benchmark 并可视化显示出来。 支持多个版本的 clang 和 gcc。 背后用的应该是google benchmark这个开源库,你也可以在自己的机器上安装这个库。Compiler Explorer支持将 C++ 代码编译成汇编代码。 支..原创 2020-10-13 20:30:36 · 1625 阅读 · 0 评论 -
【C/C++】Boost::pool内存链/池
boost::pool 的实现原理pool去按照一定的增长规则,从操作系统申请一大块内存,称为block,源码中用PODptr表示。这个PODptr结构将block分为三块,第一块是大块数据区,第二块只有sizeof(void*) 个字节,即指针大小,保存下一个PODptr的指针,第三块保存下一PODptr的长度。最后一个PODptr指针为空。PODptr的数据区被simple_segregated_storage格式化为许多个小块,称为chunk。一个chunk的大小是定义boost::obje转载 2021-11-06 10:18:55 · 3025 阅读 · 1 评论 -
【Linux C】man查看C函数原型|定义
目录用法报错处理用法man 3 printf解释:man read,我想看的是ANSI C中stdio的read函数原型和说明,没想到出来的确是BASH命令的说明,这是怎么回事呢? 原来read本身是man命令的一个参数,这样输入man就会以为你要使用read的功能,而不是查看read函数,那么要怎样查看read函数呢? 答案是使用: man 2 read 或者是man 3 read中间的数字是什么意思呢?是man的分卷号,原来man分成很...原创 2021-10-21 10:44:50 · 956 阅读 · 0 评论 -
【C++】linux多线程设置线程名字
目录1. prctl() (只能给当前线程设置名称)2、pthread_setname_np1. prctl() (只能给当前线程设置名称)#include <sys/prctl.h>iErr = prctl(PR_SET_NAME, “Hello_project”);第一个参数是操作类型,指定PR_SET_NAME,即设置进程名PR_SET_NAME:设置当前线程的名字PR_GET_NAME:获得当前线程的名字第二个参数是进程名字符串,长度至多16字节..原创 2021-10-09 21:17:49 · 7773 阅读 · 1 评论 -
【C++】join()和detach|不join()也不detach()的后果
一、join()和detach()joinjoin():主线程需要等待子线程运行结束了才可以结束detachdetach()称为分离线程函数,使用detach()函数会让线程在后台运行,即说明主线程不会等待子线程运行结束才结束。总结在一个线程中,开了另一个线程去干另一件事,使用join函数后,原始线程会等待新线程执行结束之后,再去销毁线程对象。 这样有什么好处?---->因为它要等到新线程执行完,再销毁,线程对象,这样如果新线程使用了共享变量,等到新线程执行完再销毁这个线程对原创 2021-09-30 13:03:21 · 3993 阅读 · 0 评论 -
【GDB】GDB多线程查看堆栈|调试多线程总结
例子2021-09-29 16:37:17.931204 7fff637f7700 422708 59 ERROR RDMAStack in polling_start 2021-09-29 16:37:17.931227 7fff637f7700 422708 59 ERROR RDMAStack polling_start start polling thread:1 [New Thread 0x7fff4475f700 (LWP 423826)] 2021-09-29 16:3.原创 2021-09-29 16:58:26 · 9222 阅读 · 0 评论 -
【GDB】VisualStudio 2017跨平台(Linux)调试|可视化GDB|visual GDB
远端的linux 环境需要具备1、openssh-server (SSH服务)2、gcc (vs2017 默认是c++11标准,所以如果远端不支持c++11 应该设置2017不使用c++11,右键--》属性--》配置属性--》C/C++右边C++语言标准C++11改为C99)3、gdb-server (用yum install gdb-...原创 2019-04-24 02:21:15 · 3290 阅读 · 0 评论 -
【GDB】GDB调试总目录
【GDB】GDB 调试多线程和多进程总结报错记录(gdb) b mps_guide_db.c:1699No source file named mps_guide_db.c.可能是因为调用了动态库,要打断点的文件是动态库的可以通过 以下方式得到解决:(gdb) set breakpoint pending on(gdb) b db_subscr_no_lookupFunction "db_subscr_no_lookup" not defined.Breakpoint 1原创 2021-09-28 20:44:49 · 732 阅读 · 0 评论 -
【C/C++】环形队列实现原理
环形队列是在实际编程极为有用的数据结构,它有如下特点。 它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列. 环形队列广泛用于网络数据收发,和不同程序间数据交换(比如内核与应用程序大量交换数据,从硬件接收大量数据)均使用了环形队列.一.环形队列实现原理----------------------------------------------...原创 2021-09-28 03:01:31 · 1805 阅读 · 0 评论 -
【多线程】pthread_kill用法|判断线程是否在运行
即看即用1、向线程发送向线程发送signalint pthread_kill(pthread_t thread, int sig);线程内用signal()去抓信号并加上处理函数。2、判断线程是否在运行int kill_rc = pthread_kill(thread_id,0);if(kill_rc == ESRCH)printf("the specified thread did not exists or already quit\n");else if(kill_r原创 2021-09-26 16:00:34 · 1606 阅读 · 0 评论 -
【C++】C++多线程资料总目录
基础知识【多线程】c++11多线程编程(一)——初识编程实践【多线程】C/C++语言中多线程的简单例子_bandaoyu的笔记-优快云博客_c语言多线程并发例子【C++11】线程池 简单实现_bandaoyu的笔记-优快云博客【C++11】多线程类Thread和用法示例_bandaoyu的笔记-优快云博客测试和调试【GDB】GDB 调试多线程和多进程总结_bandaoyu的笔记-优快云博客...原创 2021-09-26 14:24:02 · 964 阅读 · 0 评论 -
【C++】C++对象数组的定义和初始化
如果一个类有默认的构造函数,使用new动态实例化一个对象数组不是件难事,如下代码:class animal{public: animal():num(0) {} ~animal() {}private: int num;};Animal *ani = new Animal[5];delete[]ani;然而 new Obj[n]的形式仅仅适用于不需传入实参的默认构造函数,否则编译器报错。想要初始化对象数组的同时指定各个构造函数的参数,有以下几种解...原创 2021-09-24 15:13:56 · 19069 阅读 · 0 评论 -
【C++】explicit|关闭构造函数用作自动类型转换| =default 和 =delete 使用
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 { public: char *_pstr; int转载 2021-09-03 21:05:17 · 788 阅读 · 0 评论 -
【C/C++】解析简单配置文件|解析从脚本读出的流配置
How to parse a simple config file本文解释了如何解析类似于 Windows .ini 文件的 name=value 形式的配置文件。该代码从行中删除所有空格并跳过空行和包含注释的行。配置文件的格式The code explained in this article can parse both a formatted and unformatted input# formattedgenerates_output=truefile_format=txt原创 2021-08-16 21:01:04 · 1158 阅读 · 0 评论 -
【C/C++】数值转换成字符串|字符串转换成数值|进制转换
格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf在大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123);//产生"123"(原文:http://baike.baidu.com/view/1295144.htm)I...原创 2011-07-19 11:31:44 · 10792 阅读 · 1 评论 -
【C\C++】程序如何执行shell命令并获取执行结果|popen
使用popen 方法popen()可以执行shell命令,并读取此命令的返回值; 与pclose函数配对使用。头文件 1 #include<stdio.h> 函数定义 1 2 FILE*popen(constchar*command,constchar*type); intpclose(FILE*stream); 函数说明po...原创 2021-08-04 17:14:33 · 3659 阅读 · 0 评论 -
【C/C++】结构体操作|地址计算(宏)|打印结构体
获得一个结构体变量成员在此结构体中的偏移量linux下开发经常会碰到这2个宏,总结下:1 #define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER )宏功能:获得一个结构体变量成员在此结构体中的偏移量1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;3. &( ( (TYPE *)0 )->MEMBE原创 2021-08-04 14:34:23 · 4987 阅读 · 1 评论 -
【C++11】inline与namespace使用|C语言的inline内联函数的作用
目录内联命名空间内联空间应用场景内联命名空间还有以下特点内联命名空间C++11中引入了内联命名空间(inline namespace),它的特点就是不需要使用using语句就可以直接在外层命名空间使用该命名空间内部的内容,而且无需使用命名空间前缀。用途:默认放出新版接口,保留旧版的接口。先看代码:all::fun(1); #V2017版的inline了,所以外层不加空间前缀调用的就是V2017的all::V2018::fun(1); #调用其他版原创 2021-07-30 14:23:12 · 869 阅读 · 0 评论 -
【GCC】undefined symbol问题的查找、定位与解决方法
原文链接:https://blog.youkuaiyun.com/buknow/article/details/96130049今天被客户测出来一个问题:程序执行中报错,报错内容如下XXXX:symbol lookup error:/home/....../libpdfium.so:undefined symbol:CRYPT_MD5Generate报错分析:这个问题表明是符号未定义的问题,而且直接定位于产品链接的第三方动态库libpdfium.so中,于是从libpdfium.so...原创 2021-04-15 22:51:34 · 3845 阅读 · 0 评论 -
【Cmake】xx.cmake 文件是什么|有什么用?
.cmake 文件谁用.cmake 文件 是给cmake执行用的:cmake -P /path/of/xxx.cmakecmake 参数-P的解释-P<file>Process script mode.Process the given cmake file as a script written in the CMake language. No configure or generate step is performed and the cache i...原创 2021-04-10 10:18:24 · 22467 阅读 · 1 评论 -
【GCC】gcc警告选项汇总--编辑中|gcc编译选项
参考原文:https://blog.youkuaiyun.com/qq_17308321/article/details/79979514前言警告:不是错误的,但是有风险或表明可能有错误。请求或取消警告选项(https://blog.youkuaiyun.com/qq_17308321/article/details/79979514)-fsyntax-only检查代码中的语法错误,但除此之外不要做任何事情。-w禁止所有警告消息。-Werror使所有的警告进入错误。-Werror=将指定.原创 2021-04-03 19:16:33 · 29885 阅读 · 0 评论 -
【Makefile】Makefile文件中的 .PHONY 的作用
目录即看即用详细说明即看即用作用:告诉make,.PHONY:后面跟着的名称都不是指某个文件,即make xxxx,如果makefile中xxxx 写在.PHONY:后面,那么make xxxx 就表示执行预定命令,而不是要(make)生成xxxx.PHONY:cleaninstall run update clean: rm -f *.o tempinstall:……run:……update:……执行make clean 表示运行c...原创 2021-04-01 22:14:44 · 4316 阅读 · 0 评论 -
【GCC】gcc条件编译和make 传参gcc|Makefile 带参数
gcc条件编译myprogram.c代码中:#ifdef UMP_TO_FILE //do something here... #endifgcc编译时: gcc myprogram.c -DUMP_TO_FILE -D加上宏UMP_TO_FILE,相当于你在代码中#defineUMP_TO_FILE-D UMP_TO_FILE = 1,相当于你在代码中#defineUMP_TO_FILE 1-D namePredefine name as a macro, ...原创 2021-04-01 10:43:56 · 2849 阅读 · 0 评论 -
【make】make 报错记录
waitting for unfinished jobs 2021.03.30make common -j32原因:没有权限改为sudomake common -j32 编译通过原创 2021-03-30 15:50:49 · 1065 阅读 · 0 评论 -
【GCC】参数选项笔记|-Wl,-soname|include宏定义和易错地方
-Wl,-soname(原文:https://blog.youkuaiyun.com/gohome520/article/details/7259450)-Wl选项告诉编译器将后面的参数传递给链接器。-soname则指定了动态库的soname(短名,Short for shared object name)-Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。每一个库都有一个soname,当连接器发现程序库(如:libhello_v1.so)中有soname原创 2021-03-29 19:01:01 · 2352 阅读 · 4 评论 -
【cmake】CMakeList添加库|添加头文件|添加路径|add_executable、add_library、target_link_libraries|添加编译选项|宏开关
Opencv依赖库的添加:cmake_minimum_required( VERSION 2.8 )project( imageBasics ) # 添加c++ 11标准支持set( CMAKE_CXX_FLAGS "-std=c++11" ) # 寻找OpenCV库set(OpenCV_DIR /home/chaofan/opt/opencv-3.4.4/release)find_package( OpenCV 3 REQUIRED )# 添加头文件include_directo原创 2021-03-24 10:41:43 · 47784 阅读 · 3 评论 -
【GDB】GDB动态打印不修改源码printf|打印类Class的成员|定义变量
GDB动态打印命令dprintf来实现print消息的输出,dprintf原理dprintf命令会设置一个特殊的断点,这可以通过info break查看,dprintf设置了类型为dprintf的特殊断点,当程序执行到该断点时,GDB将按照template和expression打印消息,打印完成后继续执行程序。这个过程非常短暂(和仿真器的速度有关),人是感觉不出程序停顿的,所以看起来就跟是目标程序在打印消息一样。在指定行打印dprintf perf_msgr_client.cc:13..原创 2021-03-19 17:06:11 · 1569 阅读 · 0 评论 -
【C/C++】程序在main之前/之后执行代码|main之前打印编译日期
http://www.mamicode.com/info-detail-2087871.html原创 2021-03-13 21:01:12 · 378 阅读 · 0 评论 -
【ceph】cmake管理Ceph编译+Ceph工程目录+cmake 实战学习
Makefile详尽的Makefile规则教程:https://blog.youkuaiyun.com/liang13664759/article/details/1771246这里有篇很简单的cmake入门博客:如何编写CMakeList.txthttps://www.cnblogs.com/cv-pr/p/6206921.htmlcmake是跨平台的编译管理工具。主要作用其实就是根据规则自动生成Makefile,然后使用make命令进行编译链接。所以使用cmake需要如下步骤:1. 编写CM...原创 2021-03-13 12:29:57 · 1379 阅读 · 0 评论 -
【C/C++】C语言获取编译时间|程序打印编译时间
打印固件编译日期时间printf(" Firmware compile time:%s %s\n", __DATE__, __TIME__);结果Firmware compile time:Feb 11 2020 19:41:481实现方法是使用C语言预定义宏。ANSIC标准定义了可供C语言使用的预定义宏:1、__ LINE__ : 在源代码中插入当前源代码行号2、__ FILE __ : 在源代码中插入当前源代码文件名3、__ DATE __ : 在源代码中插入当前编译日期〔注意和当前原创 2021-03-12 19:42:26 · 9899 阅读 · 0 评论