自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

转载 内存泄漏调试 ---- jemalloc的heap profiling

使用jemalloc时,可以通过profiling机制来发现并定位内存泄漏(memory leak)。本文翻译自原文并增加了一些例子。

2023-05-16 11:28:09 1586

转载 死锁,pstack,gdb简单排查死锁问题

什么是死锁?怎么排查死锁?怎么避免死锁?

2022-11-12 21:31:24 366

转载 C++中Lambda的用法

Lamdba是什么?Lambda表达式又称匿名函数,用于定义并创建匿名的函数对象,是C++11版本新增内容,可以简化代码的编程工作。Lambda的语法为:[capture_list] (params_list) mutable exception -> return type { function body }其中,各个部分参数的意义为:capture__list:捕获外部变量列表,方式包括=,&,this等,不可省略。params_list:形参列表,无参数可省略。mutab

2022-05-09 19:38:43 433

转载 RocksDB及存储引擎基础

RocksDB及存储引擎基础

2022-04-27 19:23:44 277

原创 rocksdb-参数配置

一、关键参数create_if_missing:创建缺失表num_levels:层次数量,默认是7。如果L0大小有512MB,6层能容纳512M+512M+5G+50G+500G+5T,如果配置是7,在数据量少于前面计算的5T+的数据之前,最后一层是不会被使用的。如果num_levels配置为6,那么最下面一层数据量会大于5Tmax_background_flushes:memtable dump成sstable的并发线程数。默认是1,线程数小,当写入量大时,会导致无法写入。max_backgrou

2022-04-22 17:37:01 2937

原创 boost::intrusive_ptr的用法

boost::intrusive_ptr和shared_ptr的区别shared_ptr最大的陷阱就是用同一个裸指针创建了多个shared_ptr,这会导致这些shared_ptr析构时,因为每个shared_ptr都有自己引用计数,导致这个裸指针多次销毁所以不能用一个裸指针来创建多个shared_ptr,但却可以来创建多个intrusive_ptr,因为所使用的对象通过继承包含引用计数功能的基类(将引用计数作为对象的内部成员变量,大家共用一个计数器,就不会出现每个对象里都有自己的计数问题。intru

2022-04-18 20:34:32 907 2

原创 ceph OSD写流程

2022-03-05 14:21:36 278

原创 ceph osd-读流程

Luminous v12.2.12版本

2022-03-05 10:59:55 190

转载 RocksDB-Column Family(列族)

概述在RocksDB 3.0中加入了Column Family特性,加入这个特性之后,每一个KV对都会关联一个Column Family,其中默认的Column Family是 “default”. Column Family主要是提供给RocksDB一个逻辑的分区.从实现上来看不同的Column Family共享WAL,而都有自己的Memtable和SST.这就意味着我们可以很 快速已经方便的设置不同的属性给不同的Column Family以及快速删除对应的Column Family。主要API首先

2021-10-19 20:23:33 4446

转载 c++ 关键字override

1 公有继承公有继承包含两部分:一是 “函数接口” (interface),二是 “函数实现” (implementation)如 Shape 类中,三个成员函数,对应三种继承方式:class Shape {public: virtual void Draw() const = 0; // 1) 纯虚函数 virtual void Error(const string& msg); // 2) 普通虚函数 int ObjectID() const; // 3

2021-10-18 19:23:02 2321

原创 gdbserver+attach+定位现场设备偶现BUG

2021-10-18 15:44:11 708

原创 死锁排查——sysRq,strace,gdb

2021-10-12 16:29:45 264

原创 避免踩坑--网传二进制数值和点分十进制ip之间的转换

1.把ip地址转化为用于网络传输的二进制数值int inet_aton(const char *cp, struct in_addr *inp);inet_aton() 转换网络主机地址ip(如192.168.1.10)为二进制数值,并存储在struct in_addr结构中,即第二个参数*inp,函数返回非0表示cp主机有地有效,返回0表示主机地址无效。(这个转换完后不能用于网络传输,还需要调用htons或htonl函数才能将主机字节顺序转化为网络字节顺序)in_addr_t inet_addr(

2021-08-16 14:36:21 1153

转载 C程序中的内存分布

一个典型的C程序存储分区包含以下几类:Text段已初始化数据段未初始化数据段栈堆C程序中的内存分布

2021-08-02 10:30:38 69

原创 wireshark排查问题小结

排查呼叫无声音问题:采样率、G711A/U相关问题源地址和目标地址相关问题sip报文相关问题小结

2021-07-15 20:12:05 203

原创 gdb介绍和实战

      本文我将简单介绍gdb调试的原理和编译,和常见的应用场景,具体由以下四点展开。一、gdb工作原理      gdb:GNU debugger      UNIX及UNIX-like下一个强大的命令行的调试工具1.1、gdb整体架构      gdb调试的整体架构如下图所示:      

2021-02-01 18:51:31 1042

转载 数据库的五种索引类型及常见查询优化方式

本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='css',如果要拿这条数据的话需要些的sql是 SELECT * FROM award WHERE nickname = 'css' 一般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据,如果我在nickname上建立索引,那么mysq...

2021-01-19 19:58:24 1588

转载 实现交叉编译gdb和gdbserver(gdb-7.6)

                                            海思SD.

2020-12-24 19:52:04 634 1

原创 双向链表库lstLib--vxworks源码

      listlib库是Vxworks源代码中的双向链接库,由于是操作系统的源代码,所以库的代码质量师非常好的,标准的C语言,而且接口的命名、易用性和通用移植性都是非常好的。lstLib.h#ifndef _LST_LIB_H#define _LST_LIB_H#if defined( __cplusplus )extern "C" {#endiftypedef struct node /* node of a link

2020-12-10 16:38:59 677

原创 搭建嵌入式web服务器并控制外设

本文主要分为两部分:web服务器的搭建、实现web对外设的控制,主要涉及Boa+CGI+html一、web服务器的搭建我们需要用到boa,boa 是一个小型的 web 服务器,可执行代码只有约 60KB,可以用于多种平台,它一个单任务 web 服务器,只能依次完成用户的请求,在嵌入式中比较常见。boa 的官方网站为www.boa.org,可以在上面下载最新版本的 boa,这里我们使用的是 boa-0.94.13.tar.gz。第1步:boa的拷贝解压-我们需要先将boa-0.94.13.tar.g

2020-12-05 15:02:32 1446

转载 C实现环形数组队列和queue一些区别小记

网上看到一个很棒的环形数组队列实现方法,转载过来。原网址:https://blog.csdn.net/xuanwolanxue/article/details/68925446话不多说,上重点:      这里主要指的是队列的入队(enqueue)与出队(dequeue),对于链式队列来说,其入队和出队也就是链表的尾部插入与移除头部节点,这里就不多说,主要说一下以数组实现的循环链表的具体实现(其中head和tail都是表示数组的下标)。入

2020-12-05 14:32:15 270

原创 sqlite3并发读写和事务死锁问题

最近项目中涉及到sqlite并发读写的问题,最终发现基线两个数据库使用同一个db_connect()接口,都存在并发访问冲突隐患,但只在H11平台上出现。是因为其它平台性能好,“只要你CPU执行速度够快,我dhcp就能完美错开sipServer初始化,避免冲突” 。参考一些文档并结合自己的实践,对sqlite3并发问题总结了几点:sqlite3的锁及事务类型sqlite3总共有三种事务类型:BEGIN [DEFERRED /IMMEDIATE / EXCLUSIVE] TRANSCATION,五种锁,

2020-09-10 09:06:48 3435

转载 gdb调试的基本使用

https://www.cnblogs.com/HKUI/p/8955443.htmlGDB调试启动程序准备调试GDB yourpram或者先输入GDB然后输入 file yourpram然后使用run或者r命令开始程序的执行,也可以使用 run parameter将参数传递给该程序参数列表命令命令缩写命令说明listl显示多行源代码breakb设置断点,程序运行到断点的位置会停下来.

2020-09-09 18:48:17 131

原创 C语言实现快排算法

快排是在每轮挑选一个基准元素,并让其比他大的元素移动到数列一边,比他小的元素移动到数列的另一边,从而把数列拆解成两个部分,即分治思想。然后运用递归。一、快排双边边循环递归#include <stdio.h>#include <stdlib.h>void Qsort(int arr[],int low,int high){ if(low > high) return ; int left = low; int right = high; int key =

2020-08-20 09:19:33 1365

原创 typedef 和 #define 易忽略的一点区别

typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下所示:#define INTERGE intunsigned INTERGE n; //没问题typedef int INTERGE;unsigned INTERGE n; //错误,不能在 IN

2020-08-07 11:39:45 127

转载 TCP中的RST标志(Reset)详解

在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。1、TCP是什么?TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面的几个关键字:port到port:IP层只管数据包从一个IP到另一个IP的传输,IP层之上的TCP层...

2020-07-16 19:15:47 2158

转载 IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)

当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事。《 IO - 同步,异步,阻塞,非阻塞》是我在开始学习epoll和libevent的时候写的,主要的思路来自于文中的那篇link。写完之后发现很多人都很喜欢,我还是非常开心的,也说明这个问题确实困扰了很多人。随着学习的深入,渐渐的感觉原来的理解有些偏差,但是还是没引起自己的重视,觉着都是一些小错误,无伤大雅。直到有位博友问了一个问题,我...

2020-06-11 20:52:41 106

原创 利用/proc/stat/文件信息计算cpu利用率

内核在文件/proc/stat中保存了有关自身活动的各种信息。所有的统计数字都是自系统启动后累加起来的。使用cat命令简单的查看下文件:通过查看Linux系统下该文件的信息,我们可以初步计算出系统CPU的利用率,代码如下:double gCpuRate; //挑选一个稳定的线程,定期(3秒)刷gCpuRatetypedef struct CPU_INFO{ char name[20]; unsigned int user; unsigned int nice; unsigned int

2020-05-12 10:17:57 1483

转载 float和double取值范围

最近在复习的时候发现基础太薄弱,对于float和double虽然了解所占字节数,但不知道他们的取值范围是多少,这对参加大厂笔试题时是十分不利的1.八种数据类型的分类如下:第一类:整型 byte short int long第二类:浮点型 float double第三类:逻辑型 boolean(它只有两个值可取true false)第四类:字符型 char2.各种基本数据类型所占的字节:boolean 布尔...

2020-05-11 11:51:50 1344

原创 如何查看线程的运行状态

问题:我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率)。 线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使叉分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功...

2020-05-11 10:47:51 7965 1

原创 如何实现高效得往sqlite数据库里存取二维数组或结构体数据

在日常开发中,经常需要跟数据库打交道,本文主要讨论sqlite3本地型数据库。sqlite数据类型介绍在进行数据库Sql操作之前,首先有个问题需要说明,就是Sqlite的数据类型,和其他的数据库不同,Sqlite支持的数据类型有他自己的特色,这个特色有时会被认为是一个潜在的缺点,但是这个问题并不在我们的讨论范围之内。大多数的数据库在数据类型上都有严格的限制,在建立表的时候,每一列都必须制定一...

2020-01-17 19:03:04 5782 2

转载 strtok()函数详解!

strtok()函数详解!1.定义分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。在头文件#include<string.h>中。2.原型char *strtok(char s[], const char *delim);3.说明(1)当...

2020-01-13 21:07:56 242 1

原创 RTSP协议

补充,附上网上一些较好的帖子:网络流媒体协议之——RTSP协议网络流媒体协议之——RTP协议概述

2019-11-18 20:35:54 195

转载 教你写Makefile

 Makefile值得一提的是,在Makefile中的命令,必须要以[Tab]键开始。      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional...

2019-11-15 17:00:24 176

原创 sqlite3 database is locked解决方案

注意:sqlite3只支持一写多读.读与读可以同时进行读与写不可同时进行写与写不可同时进行什么时候会返回SQLITE_BUSY错误码?官方文档给出的解释是:The SQLITE_BUSY result code indicates that the database file could not be written (or in some cases read) because o...

2019-11-13 11:37:59 10950

转载 linux进程通信———Posix消息队列简介及基础库函数

linux进程通信———Posix消息队列简介及基础库函数引言:消息队列可认为是一个消息链表,有足够写权限的线程可向队列中放置消息,...

2019-11-08 18:51:33 491

转载 socket编程中write、read和send、recv之间的区别

一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用。由此网络程序里最基本的函数就是read和write函数了。ssize_t write(int fd, const void*buf,size_t nbytes);write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 在网络程序中,当我们向...

2019-10-25 16:56:05 839

原创 文件写入的原子性讨论

文件写入的原子性讨论引入:pread,pwrite,read,write区别调用pread相当于顺序调用lseek和read,但pread和这种调用又有重大区别:调用pthread时,无法中断其定位和读操作,(lseek和read相当于一个原子操作)不更新文件指针调用pwrite相当于调用lseek和write,但也与它们有类似区别因为历史上有些系统不支持O_APPEND,才定义了...

2019-10-24 22:05:22 881

原创 time_t tm timeval 和 时间字符串的转换方法

time_t tm timeval 和 时间字符串的转换方法1、常用的时间存储方式1)time_t类型,这本质上是一个长整数,表示从1970-01-01 00:00:00到目前计时时间的秒数,如果需要更精确一点的,可以使用timeval精确到毫秒。2)tm结构,这本质上是一个结构体,里面包含了各时间字段struct tm { int tm_sec; /* seconds af...

2019-10-23 17:33:11 1095

原创 标准库函数strcpy,strncpy,strlcpy

C中标准库的函数#include<stdio.h>snprintf(char* dest_str,size_t size,const char* format,…)// 函数功能:先将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至dest_str中。// 注意:格式化后的字符串长度小于size,则全部拷贝,并在结尾添加'\0'。若大于等于size,...

2019-10-18 17:15:15 385 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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