自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (8)
  • 收藏
  • 关注

原创 网络编程中select、poll与epoll详解

网络编程中select、poll与epoll详解​ 在C/S中,存在多种I/O模型(详见历史文章—C/S编程中常见的I/O模型介绍)。select、poll与epoll用于其中的I/O复用模型中,其读写是同步阻塞的。相比普通的read、write操作,可以检测多个描述符。通过阅读,能够了解select、poll与epoll的优缺点,能掌握什么时候应该使用epoll,什么时候应该使用select/poll。文章目录网络编程中select、poll与epoll详解1.select函数1.1 函数

2021-05-26 11:19:36 1211

原创 如何实现组合选项的unordered_set或unordered_map

如何实现组合关键字的unordered_set/unordered_map在VC编译器中,使用unordered_set或unordered_map时,如果需要将多个选项作为关键字进行hash,例如将学生信息中的学号和姓名相结合标记,应该如何实现呢?STL库中提供了强大的hash function,该函数可以将数据进行hash,并将多个选项进行整合得到一个hash关键字,其实现如下。#include <string>#include <unordered_set>#incl

2021-05-19 10:37:39 175

原创 C/C++内存池管理机制

GNU C内存池管理机制在不同编译器中,malloc/free内存管理的实现方式有所区别,但都是使用的内存池机制进行管理。本小节介绍在GNU C中的内存池管理,通过阅读可以学习到以下内容:文章目录GNU C内存池管理机制1.为什么使用内存池管理内存2.内存池的底层结构设计3.内存池如何管理内存下面详细介绍。1.为什么使用内存池管理内存我们经常使用下面的语句进行malloc的内存分配:data_t* ptr = (data_t*)malloc(sizeof(data_t));但是,对于计算机而

2021-05-17 16:46:39 280

原创 C/C++内存分配new与malloc详解

1. C++内存分配调用过程​ 上图中,ptmalloc,tcmalloc与jemalloc等是malloc底层实现策略。相比之下,ptmalloc性能较弱,资源消耗较多,在高CPU核心数情况下jemalloc比tcmalloc性能要好。总之,内存池管理主要针对小内存分配进行,而大内存块由系统调用进行分配,如mmap内存映射。​ C/C++内存分配原语有malloc,new,::operator new()和allocate(),其中可否重载关系如下:分配释放类别可否重载m

2021-02-27 17:25:03 886

原创 C/C++内存管理

内存管理​ 只有地址总线上的地址是真实的物理地址,而在CPU中的地址都是逻辑地址;也就是说只有地址总线操作的内存时物理内存,其他都是虚拟内存。虚拟内存与物理内存的映射就是地址翻译的过程,不同的物理内存管理有着不同的映射方式。1.内存扩充技术​ 覆盖技术主要用于早期的操作系统中。交换主要在进程或作业之间完成,而覆盖技术在同一个进程或作业内完成。1.1 覆盖技术​ 一个程序不需要将所有的指令与数据放入到内存中,而是将程序划分为若干个相对独立的程序段,按照运行逻辑将那些不会同时运行的程序段共享同一块内

2021-02-27 15:44:50 236

原创 accept (EMFILE错误)文件描述符用尽解决方案

问题描述:accept处理连接时,若出现 EMFILE 错误不进行处理,则内核间隔性尝试连接,导致整个网络设计程序崩溃,因此需要处理这不当的请求。对于用户而言,处理该请求的关键就是文件描述符,然而没有请求成功就不存在相应的文件描述符,这是一个麻烦的问题,下面借由muduo库(方法来源于libev)简单说明一下解决方案。方案:事先创建一个指向空文件( /dev/null )的 idlefd 文...

2020-02-25 11:46:46 1394

原创 神奇的模板元编程——TMP

最近学习巨佬的《Effective C++》其中第48条款,下列内容均摘自于该条款,另加上了一点自己的个人见解。Template metaprogramming(TMP,模板元编程)是编写template-based C++程序并执行于编译器的过程。TMP有两个伟大的效力1.他让某些事情更容易;2.由于TMP执行于C++编译期间,所以可将工作从运行期转移到编译期;有两大优势:·某些错...

2019-10-26 17:53:58 864

原创 C++并发数据结构的内存回收

简介最近学习《CPP concurrency in action》的一些总结,文中的图片与程序皆是引用于该书。*数据结构并发编程中,内存回收一直是一个头疼的问题。下面简单介绍使用引用计数的方式,进行内存回收。背景:以最简单的数据结构——栈为例,进行在设计无锁的线程安全栈结构时,借助的是原子操作和内存顺序特性实现。栈结构设计,其本质就是对结点node指针进行操作,push()操作只有内存分配...

2019-07-22 20:15:26 618

原创 C++多线程内存模型

文中图片摘自《c++ concurrency in action》用于自我学习,存在不足,还请指正。内存模型基础在C/C++中,无论是常规的整型变量,还是结构体或是C++中的类,在计算机中都是在一定的内存位置进行存储的。而这个内存位置是在初始化就已经确定好,不同的内存位置,那么程序访问变量的顺序也有就不同。同样,在多线程程序中,如果程序的执行顺序不同,那么结果就有所区别。因此多线程程序中,原子...

2019-07-21 11:26:18 1107

原创 C++原子操作atomic库介绍

原子操作如名字所述,其操作是不可分割的操作。在多线程中,原子操作因不可分割性,对认识数据同步有这重要的作用,而且原子操作可以使用互斥锁进行模拟。标准原子类型定义在<atomic>头文件中,或许c++标志库中原子库的实现就是通过互斥锁模拟的,我们可以通过其方法is_lock_free()检测是否该类型内部是通过使用锁模拟的,若返回false则表示该原子类型是库或是编译器内部使用一个锁实现...

2019-07-20 17:20:51 1041

原创 进程join和detach注意事项

join就是加入线程,调用线程等到被调用线程结束之后,再继续进行;detach是分离线程,让其被调用线程自行运行,不必等待。但是值得注意的是,使用detach必须保证调用对象仍然有效。例如下图例子:**注意:**对于一个线程来说,只能调用join或是detach一次,不能重复对一个线程进行多次调用。可以使用joinable()查看是否可以调用,false表示线程不能再次join或是detac...

2019-07-09 14:52:35 1199

原创 C++中使用vector动态创建多维数组

容器在C++中是一个很重要的部分,如果熟练使用能够大大提高编程效率。本文简单介绍使用vector容器创建二维数组。下面是实现的案例**注意:**使用基于范围的for循环更改数组属性时,需要传递数组的地址或是引用才能更改成功,这与函数的传递类似。同时上面有:基于范围的for循环使用,算法库中的copy函数,可以直接将迭代器中数据搬移到输出流迭代器中,实现快速输出。(便于自己记忆,记录一下)...

2019-06-02 17:16:25 2848

原创 C++中可变参函数的几种实现方法

C++中,可变参函数列表的,用三种实现方法:• 使用继承于C语言头文件<stdarg.h>中的可变参宏:va_list va_start va_arg va_end进行参数扩展。宏说明:va_list----用于定义一个va_list类型的变量,为后面的扩展可变参列表做准备eg: va_list pvar;va_start—用于初始化va_list类型的变量eg:...

2019-04-24 19:06:14 6179

原创 高斯信道下信号相位估计

目的:在Eb/N0(5db~30db,间隔5db)下的加性高斯白噪声,并且假设信道(AWGN信道、瑞利信道)引入了30度的相位误差,采用QPSK调制信号作为导频信号,试仿真不同情况下的平均相位估计与采样点间曲线。改变里面参数,并分析其对相位估计的影响。主要原理介绍基本信道在通信系统中,对信道的研究有着重要的作用。信道的作用是把携有信息的信号(电的或光的)从它的输入端传递到输出端,因此,它的最...

2019-03-24 15:01:32 5523 1

原创 灵活的string类与istringstream的联合使用

C++库中有着便于开发的函数,string类就是其中一小部分。下面将介绍几个string类中非常有用的函数,并附加了用其实现的几个有用函数。str.find( childstr [,position] )该函数返回的是str中childstr子串第一次出现的位置,其中position为可选参数,该参数表示从第几个位置开始查找子串,默认为起始位置(position=0);str.replace...

2019-01-22 20:01:31 308

原创 自定义BP神经网络参数

下面就是设置完成的神经网络图下图为神经网络训练结束各参数图

2019-01-18 19:46:04 2421

override_new

自定义内存池管理内存,并重载new/delete操作符。同时,使用实例进行测试。

2021-05-18

2020年中兴捧月Dijkstra派C++程序

2020年中兴捧月Dijkstra派程序,获得西南赛区区域优胜奖。

2021-04-16

MFC实现的AES加解密软件(内含源代码)

该软件实现了AES-128加密方式的16进制字符加密,且能通过密码,密文进行解密。内含MFC源代码,可以进行二次开发。

2019-04-24

学生作业管理python实现

该程序实现了,对学生作业的相应文件的检索,然后找出文件名中的学生学号;最后,在学生名单中,勾选出没有交作业的学生,并将没交作业的学生信息打印出来,保存在txt文本中。 方便作业的管理,同时可以根据自己的需要,再次开发出属于自己的优质管理系统。

2019-03-24

存在相位误差的信号估计

在Eb/N0(5db~30db,间隔5db)下的加性高斯白噪声,并且假设信道(AWGN信道、瑞利信道)引入了30度的相位误差,采用QPSK调制信号作为导频信号,试仿真不同情况下的平均相位估计与采样点间曲线。改变里面参数,并分析其对相位估计的影响。详见我的博客:高斯信道下信号相位估计

2019-03-21

单片机实现软件I2C配置程序

该程序为软件I2C配置程序,其中不仅包含基本的I2C配置程序,而且还能完成字节读写功能、连续读写多位数据的程序等,而且更改方便,只需要更改程序前面的接口即可使用。

2018-11-30

智能车MK系列芯片硬件I2C配置程序

该程序配置了K60、K10等MKxx系列单片机的硬件I2C传输功能,并能完成传输16位数据只需要100us左右,比平常的软件I2C配置程序速度快很多。这在智能车等竞速比赛中有着很重要的作用。

2018-11-30

空空如也

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

TA关注的人

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