自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 多维vector去重

对于二维数组,比如 vector<vector> 这样的,如何去重呢? 和shell脚本很像。 shell脚本是 xxx | sort | uniq ; C++代码要记住3个关键词: sort, unique, erase 1> 先sort,然后才可能做unique; 2>...

2020-06-11 00:00:11 81 0

原创 实现正则中的通配符匹配及编程感想

实现正则中的通配符比较及编程总结 很久以前,刚接触正则表达式的时候,惊讶于它有如此强大的匹配功能;也略微想了一下应该如何实现正则表达式的匹配功能,当时就觉得头大,连个星号的匹配也没想清楚,就放弃了。 现在很偶尔地刷刷LeetCode上的题。这两天刚好碰到一个通配符问题:要求实现问号(?)和星号(*...

2020-05-16 22:35:53 75 0

原创 自定义gdb命令打印STL容器与数据成员的

前面2篇博客分别介绍了gdb脚本的语法及应用以及使用Python API自定义gdb命令,而在gdb中打印STL容器的一些信息,仍不是非常方便,最好也能自定义一些命令进行处理。 有高人推荐了GitHub上的一篇博客,里面记述了这样的命令,范围涵盖还是比较广泛。仔细看代码的注释,似乎是美国名校的几位...

2020-05-10 19:26:15 95 0

原创 用户自定义gdb命令的Python实现

使用gdb调试的时候,人们往往会希望有一些命令能实现自己特殊的需求,但实际上gdb本身并没有提供这样的命令。 对这些用户需求,其实常可以使用gdb的Python API(或其他语言的API)来实现。 首先,Python API的总帮助页在这里: GDB Python API 其中常用的有关于Bre...

2020-05-06 00:38:18 100 0

原创 用gdb脚本进行自动化调试

本文首先介绍用于自动化调试的gdb脚本的基本语法和基本用法,然后给出程序实例和调试实例。 在使用gdb调试程序的时候,如果想让调试自动化,该怎么办呢? 比如,想关闭 confirm,关闭 pagination,打开 print pretty, 设置 system root 为当前目录,等等。 如果...

2020-05-03 23:30:37 174 0

原创 从右值到完美转发

C++11中明确了右值的概念,引入了右值引用、引用折叠、完美转发等概念及功能。这一系列的概念及功能是一脉相承,由浅入深的。笔者为此写了三篇文章来逐步介绍这些。现集中在此文中,作为一个专辑。 简介C++11中的左值、纯右值及将亡值 谈谈右值引用 详解模板参数推导、引用折叠和完美转发 C++作为非...

2020-04-11 15:22:46 41 0

原创 详解模板参数推导、引用折叠和完美转发

在前面的2篇博文中,分别介绍了左值右值和右值引用。 本文意在介绍模板参数推导规则、引用折叠和完美转发。 右值引用(准确地说,是万能型引用,即universal reference),模板参数推导规则和引用折叠,这三者的结合,实现了完美转发。本文将依次介绍以上三者。 证明引用、左值引用、右值引用的方...

2020-04-11 15:12:37 84 0

原创 谈谈右值引用

左值与右值 这在之前的一篇博文中有详细介绍,这里再简单说一下。 左值: 可使用&符号取地址 可位于赋值操作符=的左侧,也可位于右侧 右值: 不能使用&符号取地址 只能位于赋值操作符的右侧 老式的swap函数 template<class T> swap(T&...

2020-04-05 11:40:17 63 0

原创 shell数组的一些总结

shell数组的一些总结 # 数组定义法-1 myarray=(1 2 3 4 5) # 数组定义法-2 myarray myarray[0]="A" myarray[1]="B" # 获取数组的长度 ${#myarray[@]} # 遍历法-1: f...

2020-03-21 12:07:05 62 0

翻译 C++11多线程之std::unique_lock

翻译了cppreference上关于unique_lock 的一些文章。

2020-03-18 21:54:23 10585 2

原创 git clone与git pull的时候不拉大文件

很多时候,人们需要在git仓库里存储一些巨大的动辄数百MB甚至数GB的二进制文件以帮助编译或部署用。git 通过 lfs 支持大文件存储。 而这些大文件呢,往往也经常被更新。这就带来一个问题 - 开发人员并不需要这些巨大的二进制文件,而只是需要一些源代码文件即可。频繁的更新大文件,会浪费许多pul...

2020-03-18 21:40:45 152 0

原创 简介C++11中的左值、纯右值、将亡值

在c++11以后,表达式按值类别,可分为3种: 左值(left value,lvalue) 将亡值(expiring value,xvalue) 纯右值(pure rvalue,pralue) 另, 泛左值(generalized lvalue,glvalue) = 左值 + 将亡值 右值...

2020-03-05 23:08:48 167 0

原创 Linux下动态链接库的2种链接方式

Linux下动态链接库的2种链接方式 方式一 通过 dlopen, dlsym, dlerror, dlclose 在代码中直接打开与使用动态链接库 dlopen 用于打开动态链接库,返回句柄 dlsym 使用dlopen返回的句柄与函数名来获得函数位置,返回函数指针 dlclose 关闭动...

2020-02-22 23:01:17 123 0

原创 gcc 的 __attribute__ 关键字简介

gcc 的 attribute 关键字简介 参考文档见: https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html#Variable-Attributes https://gcc.gnu.org/onlinedoc...

2020-02-01 10:14:46 95 0

原创 使用strip, eu-strip, objcopy等剥离与导回符号表及调试信息

1.符号表信息和调试信息 符号表信息(symbols)和调试信息(debug info)是由不同段区分的。 使用 readelf -S binfile 可以查看ELF文件的所有段。 调试信息相关的段: # readelf -S a.out | grep debug [27] .debug_ar...

2020-01-29 16:11:41 1025 0

原创 C语言中的setjmp和longjmp

在C语言中,goto语句只能在一个函数内实现跳转,而不能在函数间进行跳转。如果希望在函数间跳转,可以使用 setjmp 和 longjmp 函数。 Linux 会把进程的上下文保存在 task_struct 结构体中,切换时直接恢复。而 setjmp 和 longjmp 的原理也差不多: 第一次调...

2020-01-29 10:46:34 334 0

原创 手动释放Linux系统的内存

先来看看 CentOS 8 系统中 free 命令的输出。当然,它只是用来查看系统内存使用情况的,并非用来释放的。 # free -mh total used free shared buff/cache available ...

2020-01-28 09:39:31 460 0

原创 shell的一些文件操作

合并2个文件 a在上,b在下 cat a.txt b.txt > c.txt a在左,b在右 paste a.txt b.txt > c.txt split分割文件 split [-d] [-l line_num] <src file> &...

2020-01-27 15:09:34 4946 0

原创 【译】Linus有礼貌地批评了一位开发者关于spinlock

听说最近Linus耐心而又礼貌地批评了一个开发者。原文在这里:https://www.realworldtech.com/forum/?threadid=189711&curpostid=189723 今天比较有兴趣地把原文翻译了一遍。不是很难懂,但中间还是加了很多译注,都是笔者自己的一些...

2020-01-09 00:42:30 523 0

原创 Python又战Shell -实现几个对弈记录统计功能

2020开年第一篇 在之前的一篇博客中,我们对比了C++和Python的开发效率和运行效率。而对比Python和Bash shell,则是无解。因为shell可以实现的复杂功能较少而能利用的各种工具又较繁杂,所以基本不具备可比性。可是,当面对一个特定的问题,稍微比较一下shell和Python,还...

2020-01-01 08:51:18 498 0

转载 VSS, RSS, PSS, USS

转载自”超超Boy“:https://www.cnblogs.com/jycboy/p/5453533.html VSS:Virtual Set Size,虚拟耗用内存 它是一个进程能访问的所有内存空间地址的大小。这个大小包含了一些没有驻留在RAM中的内存,就像mallocs已经被分配,但...

2019-12-05 22:53:19 242 0

原创 几款常用的二进制文件分析及问题定位的工具

几款常用的二进制文件分析及问题定位的工具 具体使用,还要仔细看其文档。 fuser fuser displays the PIDs of processes using the specified files or file systems. In the default display m...

2019-12-01 11:54:36 271 0

原创 一段转换自Windows Epoch以来的秒数为正常时间的Python代码

Windows Epoch指的是 1601-01-01 00:00:00. 在有些场合下,会遇到需要将自这个时间点以来的秒数转换为正常时间。以下是一段完成此任务的Python代码。 # coding=utf-8 import sys from datetime import datetime ...

2019-12-01 10:49:33 146 0

原创 gdb的non-stop模式

All-Stop模式: 调试多线程程序时,如果某个线程断在一个断点上,调试器会让整个程序freeze,直到continue这个线程,程序中的其他线程才会继续运行。 这个限制使得被调试的程序不能够像真实环境中那样运行–当某个线程断在一个断点上,让其他线程并行运行。 Non-Stop模式: 当一个或多...

2019-11-28 23:24:57 164 0

原创 运行Ubuntu的HP笔记本合上盖子不休眠也不断网

一个小小的trouble shooting. 似乎中文搜索的结果中没有解决方案,但askubuntu上有,故实践并记录之。 首先,一个Ubuntu 18.04系统的笔记本,如何才能合上盖子(lid close)而不休眠呢?这个不难,随便搜一下到处都有。方法如下: 编辑 /etc/systemd...

2019-08-10 20:58:43 638 7

原创 为Ubuntu安装Realtek的无线网卡驱动

采用rufus制作的UbuntuU盘启动盘安装好Ubuntu 18.04之后,发现没有无线网络,不过有线可以连接。这就需要安装无线网卡的驱动了。 首先,要搞清楚无线网卡的型号,否则怎会知道安装什么驱动呢。网上有人建议这么干: lspci -vv | grep Network -A 10 其...

2019-08-10 11:04:23 2179 0

转载 C++ shared_ptr四宗罪

转载自https://www.jianshu.com/p/f1925247c14f 原文出处:https://link.jianshu.com/?t=http://blog.liancheng.info/?p=85 问题描述 在基于C++的大型系统的设计实现中,由于缺乏语言级别的GC支持,资...

2019-07-31 22:58:25 80 0

原创 武学心法

这个月没有太多的技术上的东西可以分享,就来水一篇吧。 武学心法 纵观五千年,横览儒释道,心正为第一要诀。常言道,“内圣外王”,又曰“知黑守白”,皆为维护心正而设的方便之道。人处世间,或遇大是大非,或陷一时迷惘,皆需立心为正,以此为原则,由此出发,才能逐渐找到妥善的道路;否则如无明灯而航行于大雾之海...

2019-06-30 00:11:31 165 0

原创 C++大战Python - 以C++11重写欢乐斗地主残局解答器

业界传说Python平均一行代码能够顶的上几十行C/C++代码。业界还传说,C++效率能够达到Python的几十倍。 对于以上二者,笔者本来感觉也许差不多只是略夸张。笔者曾经用C++和Python分别实现了不带cache的求Fibonacci数的函数,大约C++的效率确实可以达到Python效率的...

2019-05-12 20:08:11 693 10

原创 C++11多线程的局限

前面有多篇原创博客或译文介绍了C++11多线程的种种用法,但是在实际使用中,笔者却发现了C++11多线程的一些较严重的局限。目前看到的,主要有下面2个: 不支持类似于pthread_cancel()的功能 不支持类似于pthread_exit()这样的让当前线程立即退出的功能 ...

2019-05-11 00:18:01 197 0

原创 预编译头简介

C/C++程序编译时的预编译头,也叫“被预编译的头文件”,英文名是“precompiled header”. 使用预编译头,是一种提高编译器编译速度的方法。举个例子,1.cpp和2.cpp都包含了util.h;在编译1.cpp的时候,编译器需要把util.h和1.cpp结合起来解析一遍,而在编译2...

2019-04-28 17:48:55 410 0

原创 抽丝剥茧 - Linux内核中的双向链表

本文简单介绍一下Linux内核中的双向链表。 1. 第一个宏 offsetof 首先,看一个宏 offsetof. 这个宏定义在<kernel.h>中。 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->...

2019-04-23 23:59:27 131 0

转载 GlusterFS简介

转载自:https://blog.51cto.com/wzlinux/1949441 之前看过官网。原作者基本把官网上的几种模式集中了一下。不过个人感觉官网的介绍还不太清楚,有些细节的地方从图上还不太能看出来。之后还要做更深入的实践和一些文献阅读估计才能彻底弄明白。以下是转载的原文。 一、...

2019-03-30 20:36:16 1512 0

转载 SPDK简介

转载自: http://aidaiz.com/spdk/ 简介 固态存储设备正在取代数据中心。目前这一代的闪存存储,比起传统的磁盘设备,在性能(performance)、功耗(power consumption)和机架密度(rack density)上具有显著的优势。这些优势将会继续增大,...

2019-03-30 17:44:18 704 0

原创 C++中public、protected、private的权限总结

多年前看的东西,写个程序总结一下。 权限总结: 当没有继承时,protected跟private访问权限相同。 当有继承时: 3种继承在其成员函数的访问权限上相同,即,允许通过子类成员函数访问基类的public和protected成员变量,但不能访问基类的private成员变量。 pr...

2019-03-30 11:54:26 138 0

原创 Ceph硬件选型与性能调优

硬件选型 CPU与内存 CPU RAM Monitor 维护Cluster map,CPU不敏感 >=2GB/process (ceph-mon) O...

2019-03-25 00:11:34 284 0

转载 内存优化总结

转自:http://www.cnhalo.net/2016/06/13/memory-optimize/ 概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升。 比如nginx, 它在每个连接acce...

2019-03-24 22:13:02 125 0

原创 APUE笔记之16-17章-网络IPC套接字_UNIX域套接字

第16章 网络IPC: 套接字 套接字描述符 正如使用文件描述符访问文件,应用程序用套接字描述符访问套接字。套接字描述符在UNIX系统中被当作是一种文件描述符。事实上,许多处理文件描述符的函数(如read和write)可以用于处理套接字描述符号。 socket函数:创建一个套接字 #...

2019-03-09 21:41:47 90 0

原创 APUE笔记之15章_进程间通信

第15章 进程间通信 进程间通信主要有: 管道(pipe) 有名管道(FIFO) XSI之消息队列 XSI之信号量 XSI之共享存储 POSIX信号量 Socket(16章) UNIX域SOCKET(17章) 1. 管道 管道有2种局限性: 历史上,它们是半双工的 只能...

2019-03-09 12:31:57 117 0

原创 APUE笔记之14章_高级I/O

第14章 高级I/O 非阻塞I/O 10.5节曾将系统调用分成2类:“低速”系统调用 和 其他。 低速系统调用是指可能使进程永远阻塞的一类系统调用,如: 读管道、终端设备、网络设备的数据并不存在,读操作可能使调用者永远阻塞; 如果数据不能被相同的文件类型立即接受(如管道中无空间、网络流控...

2019-03-09 00:11:20 78 0

提示
确定要删除当前文章?
取消 删除