- 博客(155)
- 资源 (32)
- 收藏
- 关注
原创 文件句柄泄漏排查及方法总结
如果是 , 那么恭喜你,你找到问题了,接着就查看栈信息定位你代码中的问题吧。哈哈哈,就是如此简单,但是对于没有排查手段的人来说,可能就得抓耳挠腮了。如果只是怀疑文件句柄泄漏,可以通过Process Explorer 找到对应进程,双击点开查看performance中的handles变化即可,然后结合I/O项变化进行大致分析。针对windows,这个时候就要借助windbg工具,通过attach或打开exe(记得设置工作目录),可以执行g命令跑一会程序,然后break中断, 通过!
2024-10-11 11:43:12
460
原创 标准c++异常处理
std::set_terminate_C++中文网 (c-cpp.com)std::set_terminate_C++中文网 (c-cpp.com)
2024-05-12 20:54:51
116
转载 Rust使用国内镜像安装依赖
修改 cargo 的配置文件即可,对应的配置文件位置如下,如果没有就自己创建一个。# 喜欢哪个用哪个吧,没有注释掉的那个就是你选择的。Rust 依赖包使用国内镜像。Linux 或 Mac 用户。在 config 中添加如下。Windows 用户。# 中国科学技术大学。# rustcc社区。
2023-11-19 20:49:42
1170
转载 一个家里,子女没出息,离不开父母的五个穷习惯
就像一个不愿意承认错误的罪犯,无法得到社会的认可,一个不愿意承担责任的孩子,也无法在未来的人生道路上取得成功。等到子女长大了,发现别人家的孩子很优秀,自己的孩子没出息,我们又开始埋怨子女没出息,殊不知,子女没出息,往往离不开父母的五个穷习惯。有些孩子,明明很努力,可是面对机会的时候,依然唯唯诺诺,只敢走熟悉的路,殊不知父母缺乏自信,也让孩子错过了一次又一次的好机会。就像一颗没有根的树苗无法独立生长,一只没有翅膀的小鸟无法自由飞翔,一个依赖性强的孩子,也无法在未来的人生道路上独立前行。
2023-10-16 10:53:02
196
原创 c++ Explicit 关键字
explicit关键字只能修饰单参数构造函数或 带默认值的多参数构造函数且只有一个变量未有默认值的构造函数”但是在有初始化列表的当下,这种言论看到就开始怀疑!从上述结果可见:即使是多参数构造,explicit关键字依然生效。C++20支持 对explicit通过条件控制是否使能。情况下,无法通过“=号”通过构造函数隐式构建对象。不知道依据是什么,但是猜测可能是。“当时在没有初始化列表的”看到网上有很多博客写。
2023-09-15 09:47:44
178
原创 互斥mutex与spinlock的对比
如果一个低优先级的任务使用spinlock抢占了资源,但一个更高优先级的任务调度了,也要获取这个锁,但锁在低优先级任务手里,但它一直没有机会执行,也就释放不了锁。多线程场景下,单纯的对访问资源进行串行访问限制,可以用互斥。但互斥中,某个线程mutex在没有得到锁的情况下,会sleep,也就是说cpu会切换线程;这时就该spinlock上场了,spinlock在没有拿到锁时,会在原地等待,直到获取到锁。同理信号量内部也是用互斥锁mutex实现的,所以在中断函数中也不能用信号量。
2023-09-14 16:56:24
221
原创 同步机制之“信号量和条件变量”的应用总结
条件变量需要和互斥锁配合使用,而信号量之间使用就可以,所以信号量更像是条件变量和互斥锁的组合,所以必然的条件变量的使用会比信号量的使用更加灵活。(1) 信号量的创建接口,int sem_init(sem_t *sem,int pshared,unsigned int value);如果信号量的值大于0,将信号量的值减1,立即返回。如果信号量的值为0或小于0,则线程阻塞。(4)信号量的清理接口(相对sem_init而言),int sem_destroy(sem_t *sem);释放信号量,让信号量的值加1。
2023-09-14 14:16:36
930
1
原创 Ubuntu下mysql安装及远程连接支持配置
允许任何ip地址(%表示允许任何ip地址)的电脑用root和密码(password)来访问这个mysql server。如果你希望MySQL服务器对外部网络可访问,可以将其设置为服务器的IP地址或。选项用于指定MySQL服务器监听的端口号,默认为3306。选项用于指定MySQL服务器监听的IP地址。,表示仅监听本地回环地址。默认情况下,它设置为。
2023-08-14 13:42:10
1510
原创 设备树(devicetree)的interrupts属性
里面的interrupts = < >这个里面的是1个数,有的是2个数,有的是3个数。SPI:shared processor interrupts 中断号 32 ~32+224。PPI:per processor interrupts 中断号16~31。第一个参数表示是IPI、PPI、SPI、SGI其中的一个。第三个参数表示:中断触发的类型。当前interrupt 位于他的中断控制器的索引。第一个值: 该中断位于他的中断控制器的索引;第二个参数表示:是第一个参数里面的第几个。
2023-05-12 11:39:40
2350
原创 python pack和unpack的用法
按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)# 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple。格式中的第一个字符来改变对齐方式(字节序).定义如下。
2022-10-10 09:52:55
1129
转载 -O2时类型转换的惩罚-fstrict-aliasing/-fno-strict-aliasing\-Wstrict-aliasing=2
-O2优化
2022-07-05 09:49:09
298
原创 什么是mmc和emmc(mmcblkxxx、sdxx的关系)
-----------------------------------------------------------root@ubuntu-arm:/dev# ls mmc* -l //emmc芯片(mmcblk0)brw-rw---- 1 root disk 179, 0 Feb 12 2016 mmcblk0brw-rw---- 1 root disk 179, 8 Feb 12 2016 mmcblk0boot0brw-rw---- 1 root disk 179, 16 Feb ...
2022-05-09 15:32:31
2049
原创 mtd和mtdblock之间的关系
1. mtd-utils中的flash_eraseall和flash_cp两个工具只能操作mdtN 字符设备(将mtd设备分成多个区,每个区就为一个字符设备)2. mount、umount命令只对/dev/mtdblockN的MTD块设备有效3. /dev/mtdN和/dev/mtdblockN是同一个MTD设备的同一个分区(N一样),对应同一个硬件分区,两者的大小是一样的,只不过是MTD设备层提供给上层的视图不一样,给上层提供了字符和块设备两种操作视图——为了上层使用的便利和需要,比如mount命令的
2022-05-09 15:04:38
1643
转载 Python自定义模块添加以及linux下的调试方式
使用vscode添加自定义Python模块打开项目的.vscode隐藏文件夹下的launch.json文件,添加如下两行"env": {"PYTHONPATH":"${workspaceRoot}"}, "envFile": "${workspaceFolder}/.env"linux操作系统下调试python代码方法pdb的常用命令说明:l #查看运行到哪行代码n #单步运行,跳过函数s #单步运行,可进入函数p 变量 #查看变量值b 行号 #断点设...
2022-01-09 21:16:57
390
原创 手写blockque
#include <queue>#include <mutex>#include <atomic>#include <condition_variable>#include <iostream>template <typename T>class BlockQue {public: ~BlockQue(){ endBlock(); } void addTask(T data){...
2021-09-12 10:02:06
120
原创 cond_thread
#include <thread>#include <atomic>#include <queue>#include <mutex>#include <unistd.h>#include <condition_variable>#include <iostream>template <typename T>class cond_thread { typedef void (*FuncPt...
2021-09-11 22:43:46
126
转载 Linux MariaDB(Mysql)安装和简单配置
(一)使用MariaDB代替mysql数据库(MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。linux在线安装MariaDB yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start mariadb 设置开机启动..
2021-07-28 11:31:24
351
原创 内存管理基本原理
因为单次分配内存,并不仅是指定大小,会额外在指定内存前后添加cookie空间(bookspace),这样的操作会导致,高频次申请内存实际消耗内存大于实际使用, 且增加了malloc(new)调用次数和时间消耗。系统支持自定义策略,通过自己维护存池进行内存使用管理,减少malloc或new调用次数,以及cookie空间消耗。如何支持自定义策略,c++支持重载全局的operator new 和类内operator new,具体使用如下例子:#ifndef _mem_tst_h_#define
2021-07-03 19:26:30
186
转载 内存空间的连续性(逻辑地址、物理地址)
堆分配的内存空间到底是连续的还是不连续的,如malloc/new分配的内存空间是连续的吗?堆分配的空间在逻辑地址上是连续的,但在物理地址上是不连续的(因为采用了页式内存管理,windows下有段机制、分页机制),如果逻辑地址空间上已经没有一段连续且足够大的空间,则分配内存失败。堆包含一个链表来维护已用和空闲的内存块。不同进程对堆内存申请和销毁是不同步的,这就会导致一段内存区间中,部分段使用中,部分段已经空闲。在堆上新分配(用 new 或者 malloc)内存是从空闲的内存块中找到一些满足要求.
2021-07-03 19:16:15
4967
转载 堆、栈的概念及使用特性
堆和栈是一个统称,可以有很多的实现方式。计算机程序通常有一个栈叫做调用栈,用来存储当前函数调用相关的信息(比如:主调函数的地址,局部变量),因为函数调用之后需要返回给主调函数。栈通过扩展和收缩来承载信息。实际上,程序不是由运行时来控制的,它由编程语言、操作系统甚至是系统架构来决定。堆是在任何内存中动态和随机分配的(内存的)统称;也就是无序的。内存通常由操作系统分配,通过应用程序调用 API 接口去实现分配。在管理动态分配内存上会有一些额外的开销,不过这由操作系统来处理。它们的大小由什么决定? 依赖
2021-07-03 18:52:54
1613
原创 Program received signal SIGSEGV , Segmentation fault.
pthread_mutex_lockclass CBlue2th : public InnerBlue2th {public: 。。。。protected: ResCache m_resCache; //static或全局变量下可以,成员变量不行 std::set<ENUM_PROTO> m_dumpProtos;};Blue2th* CBlue2th::BT_Test_Config(vector<ENUM_RF_NAME>& .
2021-06-29 16:25:44
310
原创 八大设计原则
1. 单一职责原则 Single responsibility principle,SRP2. 接口隔离原则 Interface Segregation Principle,ISP3. 迪米特法则:Law of Demeter,LoD (最少知道原则)接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。迪米特法则还是在讲如何减少耦合的问题,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,
2021-06-23 12:20:31
181
原创 multimap用法总结
multimap在没有指定插入位置时,插入相同key值的value时默认插入在后面;在指定了插入位置的提示符迭代器后(覆盖了默认插入位置)如果插入key和位置key相等则插入在指定位置的前面,否则提示符迭代器不会生效。...
2021-06-20 18:18:09
944
转载 c++:从单例到内存屏障
首先我们用c++写一个经典的单例:#include <mutex> class Singleton { public: static Singleton* GetInstance() { if (!instance_) { std::lock_guard<std::mutex> lock(lock_); if ...
2021-06-08 16:38:53
1563
原创 关于connect函数超时太久的问题(不同系统的默认超时时长不一,但都很久)
解决方案思想: 通过把socket设置为非阻塞模式,然后通过select函数自己设置定时,检测套接字描述符是否可用。windows端实现上代码: 过于粗略,仅呈思想#include <winsock2.h>#include <Windows.h>#include <conio.h>//#include <netdb.h>#include <stdio.h>#include <stdlib.h>#include ..
2021-05-14 09:37:44
1139
原创 wpcap实例
#include<stdio.h>#include<iostream>#include<winsock2.h>#include<thread>#defineHAVE_REMOTE#include"pcap.h"usingnamespacestd;externu_int8_t*packPacket(u_int8_t*data,u_int16_tlen,u_int8_tproto=IPPROTO_...
2021-04-11 11:39:15
177
原创 udp校验和计算及伪首部
UDP中的伪首部是干什么用得到?UDP首部校验和计算:对于TCP和UDP的数据报,其头部也包含16位的校验和,校验算法与IPv4分组头完全一致,但参与校验的数据不同。这时校验和不仅包含整个TCP/UDP数据报,还覆盖了一个虚头部(伪首部)。校验和计算u_int16_t in_cksum (u_int16_t * addr, int len){ int nleft = len; u_int32_t sum = 0; u_int16_t *w = a...
2021-03-31 18:51:46
2297
原创 2021-02-08题记思维高度
其实每个游资大佬在成功之前都是普通人,也都经历过挫折和失败,没人生下来就是交易天才,都需要经过市场的洗礼才能成长。有些人快一些,有些人慢一些,只是要方向对,稳定盈利只是时间问题,终点都是一样的。第一句,换手决定高度很多游资票都是靠板板换手前进,起来的时候有充分换手的,后面才有可能走得远。人气也足。操作中只要量能不缩且持续上涨,一般都可以看成趋势继续。一只妖股里面的资金从来不是从头吃到尾的,都是接力换手上去的。很多一字板个股要么买不到 “”买到就是死期,在板块上攻的后期,容易出现一大.
2021-02-08 11:05:56
76
原创 rar
在Linux系统中解压文件时提示错误信息: Unsupported archive format. Please update RAR to a newer version解决方案:1.https://www.rarlab.com/download.htm 取官网下载新包或者 wget http://www.rarlab.com/rar/rarlinux-x64-6.3.0.tar.gz2.解压安装tar xvf rarlinux-x64-5.3.0.tar.gzcd rar...
2020-12-25 17:24:49
308
原创 Linux下rar unrar
以3.8.0版本为例,如果是64位平台,执行以下命令,也可以去官方网站:)下载最新版:wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar.gzrar软件不需要安装,直接解压到/usr/local下,以下操作需要有root权限。#tar zxvf rarlinux-x64-4.2.0.tar.gz -C /usr/local此时,/usr/local/rar下就会有rar命令和unrar命令。可以在/usr/local/bin下创建连接..
2020-12-25 17:16:18
164
原创 yum源相关
yum的各种源介绍1). CentOS-Base.repo源:CentOS默认自带,但是去除了很多有版权争议的软件,而且安装的软件也不是最新的稳定版。2). EPEL源:Extra Packages for Enterprise Linux,是由Fedora社区建立维护的。wiki:http://fedoraproject.org/wiki/EPEL Fedora EPEL 下载:http://mirrors.fedoraproject.org/publiclist/EPEL/ ...
2020-12-25 17:07:15
140
原创 C++11 锁
互斥 (Mutex: Mutual Exclusion)互斥对象锁(lock\unlock)C++使用RAII进行自动资源管理(管理类模板)加锁策略策略支持情况避免死锁线程间的锁条件锁自旋锁C++11提供了4个互斥对象(C++14提供了1个)用于同步多个线程对共享资源的访问互斥对象类名描述std::mutex最简单的互斥对象。std::timed_mutex带有超时机制的互斥对象,允许等待一段时间或直到某个时间点仍未能获得互斥对象的所有权时放弃等待。std::rec
2020-12-20 16:39:06
978
1
原创 libevent笔记- bufferevent的客户端
....using namespace std;void event_on_write(struct bufferevent *bev, void *arg){ cout<<"-------notic: data send ok"<<endl; //发送成功后回调}void event_on_connect(struct bufferevent *bev, short events, void *arg){ if (events & B.
2020-12-13 21:22:31
196
xlslib-package-2.5.0
2017-09-11
libxl 3.8.0版本 for linux
2017-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人