
基础知识
文章平均质量分 75
码农练功房
嵌入式开发,C++后端开发,通信协议软件开发
展开
-
一个死锁问题分析
为什么会死锁呢?一起来看看!!!原创 2022-12-05 17:57:45 · 494 阅读 · 1 评论 -
Linux应用程序崩溃定位
介绍Linux应用程序崩溃的一些定位手段原创 2022-09-13 14:36:25 · 1561 阅读 · 0 评论 -
modern cpp 左值右值
C++左值右值介绍原创 2022-07-13 13:22:57 · 337 阅读 · 0 评论 -
cpp智能指针
搜了下智能指针的博客,发现很乱,c++ Primer上也一大堆废话,有时看的不知所云。最后在博客园上找到一个总结还算不错的,可以快速了解下基础用法和场景。里面有些代码有点问题,修正后贴出,方便后续快速查阅。智能指针都是值语义(通常作为类的数据成员或者在stack上或者是标准容器库里面的元素),几乎不会有如下用法:shared_ptr<Foo>* pFoo = new shared_ptr<Foo>(new Foo);如果智能指针是对象x的数据成员,而他的模板参数T是个inc原创 2022-03-04 14:36:16 · 559 阅读 · 0 评论 -
智能指针与多线程
目的:智能指针在多线程编程场景下,可以保证对象安全地析构,解引用时对象有效。本文中涉及到的具体内容可以参考linux多线程服务端编程一书的第一、二章。小结:这里汇总下书中的结论:对象析构算是写操作。借助shared_ptr来实现线程安全的对象释放,但是shared_ptr本身不是100%线程安全。所以多个线程中访问同一个shared_ptr也需要加锁保护。shared_ptr会延长对象的生命周期,只要有一个指向x对象的shared_ptr,该对象就不会析构。shared_ptr是值语义,当原创 2022-03-04 14:35:05 · 1430 阅读 · 0 评论 -
最多能创建TCP连接个数
TCP连接个数受端口号、文件描述符、线程资源、内存资源、CPU资源的限制。端口号:系统用一个四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}在local ip, local port固定、不考虑ip地址分类的情况下,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。实际可用端口范围可以如下查看:[root]# cat /proc/sys/net/i原创 2022-03-04 14:27:22 · 3540 阅读 · 0 评论 -
类成员指针
指向类的数据成员的指针:指向数据成员的指针格式如下:<类型说明符><类名>::*<指针名>例如,设有如下一个类A:class A{public: int fun (int b) { return a * c + b; } A(int i) { a = i; } int c;private: int a;};定义一个指向类A的数据成员c的指针pc,其格式如下:int A:: *pc = &A::c;再定义一个指原创 2022-02-24 08:55:15 · 751 阅读 · 2 评论 -
调用约定与符号名
目的:这里对【函数调用约定与Name Mangling】之间的关系进行总结,方便后续查找。调用约定:__stdcall、__cdecl和__fastcall是三种函数调用约定,函数调用约定会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。调用约定入栈方式清栈责任__stdcall从右到左函数自己__cdecl从右到左调用者__fastcall从右到左(先 EDX、ECX,再到堆栈)被调用者调用协议常用场合:__stdca原创 2022-02-24 08:53:57 · 191 阅读 · 0 评论 -
时间管理总结
#背景windows FILETIME时间从1601/01/01 零时零分零秒开始计时,windows每个时钟滴答将计数加一,每个时钟滴答的间隔是100 nanoseconds(纳秒,1秒=10的九次方纳秒),即每个时钟滴答= 10 (-7)秒。unix、linux时间是从1970/01/01零时零分零秒开始计数,每秒计数加1。1970/01/01与1601/01/01的时间间隔是11644473600秒。#结构体FILETIME 结构体表示自1601年1月1日以100纳秒为基准的时间间隔。FIL原创 2022-02-24 08:53:05 · 247 阅读 · 0 评论 -
windows动态库和静态库
梳理下项目中常用的动态库、静态库使用方式。静态库静态库工程生成一个静态库lib文件。参考文献6制作lib后,有三种方式去使用:使用comment 显式调用,这样不用在visual studio 链接器->输入->附件依赖库里面配置依赖库,由于没有指定依赖库路径所有需要显示填写路径。使用comment 显式调用,同时需要在链接器->常规->附加库目录中配置依赖库路径。由于使用了comment所以不用在visual studio 链接器->输入->附件依赖库里面配原创 2022-02-24 08:51:27 · 1866 阅读 · 0 评论 -
linux随记
shell:shell第一行为#!/bin/bash或#!/bin/sh如果想要打印shell脚本中的每条命令的执行情况可以这样写,其中-x是用来调试用的:#!/bin/sh -x\r,\n与\r\n区别:Unix换行:\n (0x0A)MAC回车:\r (0x0D)Win回车换行:\r\n (0x0D,0x0A)抓包:tcpdump -i any -s 0 host 172.16.119.145 -v -w /tmp/test001.pcaptcpdump dst port原创 2022-02-24 08:50:53 · 394 阅读 · 0 评论 -
cpp模板总结
总结下c++模板相关的基础知识,便于查阅。模板:模板定义以关键字template开始,后跟一个模板参数列表,这是一个逗号分隔的一个或者多个模板参数的列表,用小括号和大括号包围起来。模板是个半成品,模板编译通过但是使用错误仍然会报错;可以将模板看作是编译期函数;运行期函数的参数要为一个对象(不能是模板);编译期函数的参数可以是模板;声明:模板声明必须包含模板参数:// 声明但是不定义compare和Blobtemplate<typename T> int compare(cons原创 2022-02-24 08:50:22 · 2054 阅读 · 0 评论 -
静态变量初始化
静态变量的初始化分为两个过程,一个是静态初始化,一个是动态初始化。静态初始化在系统加载后执行第一条语句之前就已经完成。所以,可以认为所有的静态初始化过程是同步完成的。动态初始化,则在main函数之前完成,对于同一个编译单元内的静态变量,动态初始化顺序等同于定义顺序,而对于跨编译单元的静态变量,初始化顺序未定义。静态数据有两种:已初始化数据和未初始化数据。在映像文件里,它们分别被放入 data 段和 bss段。只有 data 段的已初始化的数据才会真正被放入映像文件。int a=5;//data 段原创 2022-02-24 08:49:27 · 4920 阅读 · 0 评论