自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 libevent源码剖析

libevent源码剖析。

2024-03-10 14:57:13 104

原创 malloc实现原理探究

malloc

2023-03-04 16:19:44 705

原创 detach,主线程终止后子线程会结束吗

研究detach的坑和进程的退出机制

2023-02-17 21:01:29 4273 5

原创 c++11 lambda基础

lambda基础用法示例

2022-10-15 17:56:28 179

原创 c++智能指针的实现 my smart_pointer

想写个智能指针,以加深理解。在网上搜了好多例子,都不是很满意,有的都便不过。参考网上的代码,自己改写了一个版本。设计思路如何实现智能指针? 首先要明确,智能指针有哪些基本的功能? 1.管理引用计数,并当引用计数为0时,自动析构。 2.具备一个指针最基本的功能,需要重载以下操作符: operator*() operator->() 3.需要定义以下几个函数 construct copy construct a...

2021-12-26 20:30:50 505

原创 c++ function应用实例

为什么要引入std::function? c++中,有多种函数或者类似函数的东西,包括传统函数,lambda表达式,仿函数,类成员函数,类静态函数等。在使用回调函数时,我们需要定义多个版本。引入std::function之后,实现了对函数的统一。std::function是一个多态的函数封装器,通过特征标来统一函数/类函数,从而在在函数/类函数界一统江湖。 下面的例子,所有的函数/类函数具有相同的特征标,int(int),输入一个int型的参数,返回一个in...

2021-12-26 14:01:00 215

原创 c++移动构造和普通构造的区别

通过一个例子来说明移动构造和普通构造函数的区别。这个例子也是参考网上的文章做的,原文忘记了。测试环境:Ubuntu 16.04 LTS如果一个class动态分配了内存,则普通构造和移动构造有以下区别:普通构造:会进行深拷贝,涉及到构造和析构移动构造:不会进行深拷贝,直接对对象的所有权进行转移,效率更高。下面的示例代码,在generateResource return时,会进行一次拷贝。如果注释掉移动构造版本的代码,则运行时调用普通的构造函数,log如下:Auto_ptr3()::

2021-12-26 13:54:26 527

原创 c++ 如何使用functor仿函数?

如何使用仿函数?1.通过对象调用printf("%d\n", func(2));2.通过临时对象调用funcMode(3)(4);3是构造funcMod使用的,4是传入的参数。3.在STL中使用,传入一个对象,对应的算法会自动调用仿函数。#include <stdio.h>#include <vector>#include <algorithm>class funcMod {private: int m_dev;public:

2021-12-25 15:22:34 487

原创 c++内存对象模型&虚函数表vtable布局研究

vtable c++ 内存布局 查看内存布局 虚函数表 多重继承

2021-12-11 22:35:55 1681

原创 用GDB查看c/c++内存对象模型

使用GDB查看c/c++内存

2021-12-11 16:10:55 685

原创 stack smashing datected.Aborted(core dumped)

在linux下编译程序时,遇到以下错误: stack smashing datected.Aborted(core dumped) 经排查,是由于对数组进行越界操作造成的,示例代码如下:define APP_DATA_SIZ 64typedef struct { appData[APP_DATA_SIZ ]; }receData; memcpy(receData.appData,

2017-05-12 18:17:47 656

原创 fatal error: input/output error

遇到的问题:一个程序在Linux系统中可以编译通过,在Linux和Unix的共享文件夹中编译时,报出以下错误:、fatal error: XXX input/output error,recipe for target X failed.产生此错误的原因:根据系统的提示信息,在生成可执行文件时出错。原因是存在目标文件的位置是Linux和

2017-05-12 17:50:09 3949

原创 Error request for member in something not a structure or union(指针类型的转换)

运行环境,PC 64位,编译工具:Dec-C++上个例子就清楚了。#include typedef struct { int num; char name[10];}Stu,*ptrStu;int main(void){ Stu Tom = {10,"Tom"}; char *p = &Tom; printf("num=%d,name=%s\n",p->num,p->

2017-05-05 18:20:24 4472

原创 Qt中自定义c++库及使用

基于Qt,自定义c++库,并调用该库,简单的记录下方法。1.库的建立1)打开Qt—New Project—Library—c++库,默认,按提示操作即可。2)在Linux终端,make distclean—qtqmake—make,生成库文件,libxx.so。2.调用库添加库—外部库,按提示操作,加载step1中生成的库文件。

2017-02-14 16:22:34 3373

原创 用strtok()解析IP地址

用strtok()来解析形如192.168.0.115:3333的IP地址。实现这个功能有两个关键点,一是对strtok()的正确使用,二是格式的转换。#include #include #include #define IP_SZ 20struct IPAddr { unsigned char ip[4]; unsigned short port;};/*对

2017-02-04 18:52:05 937

原创 数组指针基本概念

掌握多维数组和多级指针,有以下几个要点。1)要弄清楚数组的本质,数组和指针要灵活的转换。2)弄清楚是几维数组,几级指针,然后搞明白是指向行的,还是指向列的。3)把多维数组抽象成一维的。以下是一个实例,主要用来帮助理解数组指针的概念。#include int main(){ int a[][3] = {1,2,3,4,5,6}; int (*ptr)[3] =

2017-02-04 13:35:07 276

原创 指针常见错误总结

记录遇到过的关于指针的错误与疑惑。1.未初始化,就赋值#include #include int main(){ int *p; *p = 1; return 0;}运行时出现段错误,因为系统没有给指针p分配内存。没有房子,娶了媳妇往哪里放啊。 int *p = (int*)malloc(sizeof(int*));//先买房 *p = 1;//再结婚

2017-02-04 10:22:50 3369 1

原创 如何往指定的内存地址写数据

首先,随便找一块可用的内存地址。#includeint main(void){ int a = 1; printf("&a=%p\n", &a); return 0;}某次的运行结果为: &a=0x7fff124b3cfc#includeint main(void){ int *p = (int*)0x7fff124b3cfc; *p

2017-02-04 10:17:22 12895 2

原创 MTU,MMS

MMS,Maximum Segment Size,最大报文段长度。MTU,Maximum Transfer Unit,最大传输单元。已知MTU最大为1500字节。

2017-02-03 17:21:59 653

原创 数据链路层基本概念—由《协议森林》一文整理

《协议森林》系列文章写的通俗易懂,在此向作者致敬~~以下是我做的笔记。    以太网数据帧格式如下  Preamble:  序言,七个字节,每个字节都是0xAA,其作用是为了统一收发双方的频率。收发双方的频率必须统一,否则会丢失数据。开始通讯时,接收方会不断调整自己的频率,直到和发送方一致,这个过程称为时钟复原。这个过程,就像听收音机时,调整频率,直到接收到清晰的信号。

2017-02-03 17:13:40 442

原创 线程同步—信号量(闭环控制)

本文提供一个用信号量对线程实现闭环控制的程序,该程序只是为了演示信号量的作用,并没有实用价值。  程序的逻辑很简单,类似于数字电路中的时序图。在main()中触发一下,程序就会进入闭环控制了。上个图就一目了然了。   代码如下:#include#include#includesem_t sem1,sem2,sem3;void *thread_a(void*in){

2017-02-03 16:55:16 334

原创 线程同步—互斥锁+条件变量

在《线程同步—互斥锁》一文中,我们分析了只用互斥锁同步线程的弊端——CPU的效率和时效性不可兼得。下面,我们通过使用条件变量,在保证CPU效率的前提下,提高程序的时效性。  只用互斥锁同步线程,其CPU占用率之所以高,是因为线程需要轮询,即需要不停的检查条件是否满足。我们使用条件变量,当条件不满足时,使线程阻塞。一旦条件满足,就会解除阻塞,继续往下执行。这样,线程就不需要轮询了,因此不需要占用

2017-02-03 16:11:54 262

原创 线程同步—互斥锁

个人总结,请各位审慎的,批判着看。  当两个线程访问共享数据时,可以用互斥锁来进行同步。先看一个例子:  该程序有两个线程,一个用来从键盘读取输入的数据,一个把读取的数据显示出来。其中,数组buffer为两个线程的共享数据。  编译:gcc mutex_pthread.c  -lpthread,不要忘记-lpthread。  运行该程序,在键盘上输入数据,然后把数据显示出来。读

2017-02-03 14:17:57 373

原创 文件缓冲区测试实例及总结

声明:这篇笔记是我去年写的,当时参考了网友的博客,现在想不起来是哪篇了。如有侵权请告知,我会及时修改,谢谢。  “Talk is cheap, show me the code",so,先来一个例子吧。#includeint main(void){ int i; for(i=1 ; i <= 1024 ; i++) { printf("%c",'a'); } while(

2017-02-03 10:05:26 730

原创 《C和指针》练习题~9.14_10 palindrome()

最近在看《C和指针》,做了一些课后习题,记录下。题目出处:9.14编程练习,第10题以下是我的解答:/*判断一个字符串是否为回文数,判断时忽略所有的非字母字符,并不区分字母的大小写*/int check( const char *str){ char str_del[LEN]; char *p_end = str_del; char *p_begin = p_end;

2017-01-23 14:42:38 224

原创 《C和指针》练习题~6.18-2 del_substr()

最近在看《C和指针》,做了一些课后习题,记录下。题目出处:6.18编程练习,第2题以下是我的解答:/*说明:str="123qwe456",若substr=789,返回0;若substr=qwe,则返回123456;*/int del_substr( char *str, char const *substr ){ char *tmp; while( *str !=

2017-01-23 14:04:39 565

原创 《C和指针》练习题~9.14_15 dollars()

最近在看《C和指针》,做了一些课后习题,记录下。题目出处:9.14编程练习,第15题以下是我的解答

2017-01-23 11:41:48 272

原创 客户端主动获知socket连接状态的变化

项目简介:该项目把手机上的导航信息发送到汽车仪表上,并在仪表上显示,实现手机地图到仪表的投射。发送端程序用Java编写,接收端程序用C++,Qt编写。仪表和手机之间通过wifi通信。服务器:仪表,客户端:手机。工作原理:当仪表开机后,定时的对外广播本机的IP及端口号。手机导航程序获取广播并解析仪表的地址信息,然后向仪表发送TCP连接请求。当连接建立后,即可实现通信。手机程序截取图片,然

2017-01-22 10:26:41 2560 1

空空如也

空空如也

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

TA关注的人

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