![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux c
sunwake999
15年毕业的大学僧,处在社会、工作、生活的十字路口。请允许我用文字来记录下这一段时期的转型(主要是工作方面)。
展开
-
Boost入门(linux)
Boost入门(unixlike)Index1 获取boost 2Boost发行版 3 仅有头文件的库 4 使用Boost构建一个简单的程序 4.1 错误和警告 5 使用Boost二进制库的准备 5.1 简单构建和安装 5.2 定制化构建 5.2.1 安装Boost.Build 5.2.2确定你的编译工具 5.2.3 选择构建目录 5.2.4 调用b2 5.3 期...翻译 2021-07-03 14:15:10 · 606 阅读 · 0 评论 -
ubuntu查看、安装、更新、卸载boost库 指定目录
1.查看当前版本安装前请首先了解系统的boost安装情况。查看boost安装版本:dpkg -S /usr/include/boost/version.hpp如果没有查到,也不表示没有安装,有可能是手动下载安装包安装的。检查办法是sudo find /usr -name “libboost”查看一下都些版本。搞清楚状况再安装。2.命令行安装如果是安装最新版本的boost,直接执行如下命令:sudo apt-get install libboost-all-dev转载 2021-07-02 22:56:53 · 5140 阅读 · 6 评论 -
C语言printf输出百分号
在C语言中,如何输出百分号呢?很简单,只要在格式控制符里输入2个 %%就可以了,例如:#include <stdio.h>int main(){int a=90;printf(“%d%%\n”,a);return 0;}这样就会在屏幕上得到 90%转载 2021-03-11 14:22:44 · 4327 阅读 · 0 评论 -
vscode ssh 造成 服务器 负载(load average) 过高
最近使用 visual studio code(vscode)ssh远程开发。 远程主机是一台linux 服务器(ubuntu 16.04) 。期间vscode 断线之后,重新连接,发现 服务器卡的很厉害,于是查看了一下 服务器的负载情况。不看不知道,一看吓一跳:其中 负载达到20+,我的天!但是CPU 负载并不是很高,只有7.6% 。确实是一个怪事儿。仔细想想,最近也没干什么事情啊┓(´∀`)┏ ,莫非不是vs code 惹的祸 ?于是把vs code客户端给关掉,把 vs..原创 2020-06-28 13:58:39 · 4554 阅读 · 3 评论 -
linux 多核 进程/线程调度 学习
首先要明确的是,按照Linux Kernel Development 2里面的说法,LINUX和其他OS 比如WINDOWS, SOLARIS之间一个很大的不同是没有严格定义的线程(thread)。那么你也许会问,如果LINUX中没有线程,那么如何来表示类似WINDOWS 线程的那种执行观念呢?答案是LINUX中,PROCESS(进程)可以当作线程。那么你也许又会问,WINDOWS中的多线程程序...原创 2020-03-21 21:34:17 · 1282 阅读 · 0 评论 -
alloca 和 变长数组(VLA)
allocaalloca 是GNU libc中的内存分配函数。void func(){ void* p = alloca(size); // do something using p // ...}一般来说,alloca 的内存是在调用alloca的函数func 的栈上分配的,当func 返回或者异常退出的时候,分配的内存或自动释放。以上说的是一般的情...原创 2020-03-16 00:23:12 · 647 阅读 · 0 评论 -
虚继承及继承的内存布局
1.为什么需要虚继承如下图所示如果访问Der::Fun or Der::m_nValue就会带来二义性,无法确定是调用Base1的还是Base2的,所以为了解决多重继承情况下成员访问的二义性,引入了虚继承机制。一般继承:虚继承:2.虚继承实现在虚继承下,Der通过共享虚基类SuperBase来避免二义性,在Base1,Base2中分别保存虚基类指针,Der继承Base1,Base...转载 2019-02-23 20:38:42 · 279 阅读 · 0 评论 -
理解Memory Barrier(内存屏障)
本文例子均在 Linux(g++)下验证通过,CPU 为 X86-64 处理器架构。所有罗列的 Linux 内核代码也均在(或只在)X86-64 下有效。本文首先通过范例(以及内核代码)来解释 Memory Barrier,然后介绍一个利用 Memory Barrier 实现的无锁环形缓冲区。Memory Barrier 简介程序在运行时内存实际的访问顺序和程序代码编写的访问顺序不一定...转载 2019-03-11 23:21:29 · 210 阅读 · 0 评论 -
vector 中resize 和 reserve 区别
resize() 【rɪ'zɜːv】类似 realloc();reserve类似 malloc();另外 reverse【rɪ'vɜːs】 是stl 算法,反转容器中的元素原创 2019-03-24 20:22:17 · 167 阅读 · 0 评论 -
C++11 信号槽 signal/slot
最近在看陈硕大大 的《Linux 多线程服务端编程:使用 muduo C++ 网络库》 ,看到里面用variadic template 和boost智能指针 实现了一个 signal/slot,现在C++11 已经把 boost的智能指针引入到标准库里边了。就想利用纯C++11 实现一遍。结果发现,只要把原来代码中boost智能指针替换为c++11 的智能指针,把陈大大自己实现的MutexL...原创 2019-03-24 20:43:49 · 2626 阅读 · 3 评论 -
让 CPU 告诉你硬盘和网络到底有多慢
简介经常听到有人说磁盘很慢、网络很卡,这都是站在人类的感知维度去表述的,比如拷贝一个文件到硬盘需要几分钟到几十分钟,够我去吃个饭啦;而从网络下载一部电影,有时候需要几个小时,我都可以睡一觉了。最为我们熟知的关于计算机不同组件速度差异的图表,是下面这种金字塔形式:越往上速度越快,容量越小,而价格越高。这张图只是给了我们一个直观地感觉,并没有对各个速度和性能做出量化的说明和解释。而实际上,不同...转载 2019-03-18 19:59:28 · 165 阅读 · 0 评论 -
低级错误
项目中遇到一个bug,总是报内存错误,怎么查都查不出来。最后打印每个成员的偏移量,才发现,结构体内偏移量跟 公共头文件的偏移量不一致。 原来当时为了在编辑器中引用方便,我把公共头文件放到自己工程目录下面来了。编译的时候,首先引用的是当前目录下面的头文件。后来公共头文件结构发生了变化,而工程目录下面的头文件却没有改过来,导致同一个结构体,调接口读到的结构和我自己处理的结构 不一样...原创 2019-01-25 09:51:05 · 214 阅读 · 0 评论 -
关于真实、虚拟、透明的理解
如果它存在,而且你能看见它---它是真实的(real)如果它不存在,但你能看见它---它是虚拟的(virtual)如果它存在,但你看不见它---它是透明的(transparent)如果它不存在,而且你也看不见它---那肯定是你把它擦掉了。 ...原创 2018-11-15 10:18:29 · 412 阅读 · 0 评论 -
漫谈开发设计中的一些“原则”及“设计哲学”
在开发设计中有一些常用原则或者潜规则,根据笔者的经验,这里稍微总结一下最最常用的,以飨读者。DRY这里的DRY是Do Not Repeat Yourself的缩写。具体解释参见 ,严谨的定义是 Every piece of knowledge must have a single, unambiguous, authoritative representation within a sys...转载 2018-10-27 12:41:01 · 181 阅读 · 0 评论 -
内存优化总结:ptmalloc、tcmalloc和jemalloc
转载于:http://www.cnhalo.net/2016/06/13/memory-optimize/ 概述需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升。比如nginx, 它在每个连接accept后会malloc一块内存,作为整个连接生命周期内的内存池。 当HTTP请求到达的时候,又...转载 2018-07-24 18:33:39 · 223 阅读 · 0 评论 -
调试九法之 检查插头
昨天遇到一个bug,通过检查日志初步推断是condition A造成的,gcore 之后,通过检查core文件,发现“确实”是condition A照成的。于是就各种查是什么原因导致了 condition A。然而,一个小时过去了,并没有发现代码中的任何分支会照成condition A。TCP机制也不太可能造成 condition A。 于是,再次回头检查了一下core文件,发现...原创 2018-07-26 10:13:26 · 202 阅读 · 0 评论 -
C语言 printf 格式化 输出 右对齐补零
C语言IO--printf右对齐补零关于printf的一点总结,内容来自http://blog.sina.com.cn/s/blog_5ac88b350100auna.html1.1 标准输入输出函数1.1.1 格式化输入输出函数 Turbo C2.0 标准库提供了两个控制台格式化输入、 输出函数printf( ) 和 scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格...转载 2018-07-16 09:58:01 · 7548 阅读 · 0 评论 -
可串行 线程池
基本的线程池如下图所示: 线程池的原理类似一个生产者-消费者的模式。生产者(一般是主线程/IO线程 )将执行函数指针和要传递给函数的参数打包,然后放到任务队列里面;消费者(线程group) 从任务队列中取出任务,得到要执行的函数指针和函数参数,调用函数指针执行任务。执行完之后继续从任务队列里面获取任务。 线程池最大的优点就是多个任务并行执行,但不保证任务...原创 2018-08-14 20:27:06 · 658 阅读 · 0 评论 -
Linux IPC开发者性能测试
http://blog.chinaunix.net/uid-190176-id-4177874.html一. 概述 Linux/UNIX发展数十年,IPC可谓五花八门,好在后来POSIX和SUS标准化下了很多功夫,如今接口清晰稳定了不少,但各系统实现依然有不少大坑小坑,不仅要看书和查文档,还要多实践,才能逐步熟悉掌握,本文就是熟悉IPC的一种途径。 性能测试代码和思路主要基于U...转载 2018-08-03 10:55:10 · 1059 阅读 · 1 评论 -
关于float/double的取值范围、精度和表示
https://blog.csdn.net/shenziheng1/article/details/794713401.float和double的范围和精度 float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位)+8bits(指数位+23bits(尾数位)double:1bi...转载 2018-09-11 10:37:31 · 40986 阅读 · 4 评论 -
ifstream seekg 问题
文件输入流(ifstream)读到文件尾之后,调用seekg 重定向 读pos类似于以下代码片段://read whole filewhile(ifs.readline(str,strLen)){ std::cout << line++ << " : "<<str<<std::endl;}ifs.seekg(0,std:...原创 2018-10-15 18:30:25 · 5098 阅读 · 0 评论 -
task 切换过程(线程/进程)
First of all, operating system brings outgoing thread in a kernel mode if it not already there, because thread switch can be performed only between threads, which run in kernel mode. Then scheduler is...翻译 2018-10-23 09:59:17 · 507 阅读 · 0 评论 -
Linux C/C++内存越界定位: 利用mprotect使程序在crash在第一现场
对于大型Linux C/C++程序,内存越界和野指针类问题往往比较难定位。有的由于内存被非法改写造成了业务功能问题,有的则直接导致了程序crash,而且还经常不是第一现场。针对这种问题,可以采取的解决方法有:利用valgrind工具来排查,会影响程序性能;使用Address Sanitizer工具排查;如果是固定的内存被破坏,可以利用gdb watch来抓取第一现场的调用栈;可以利用Git二分回退...转载 2018-07-11 18:53:24 · 703 阅读 · 0 评论