自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(140)
  • 资源 (1)
  • 收藏
  • 关注

原创 看懂UML类图

统一建模语言(Unified Modeling Language,UML)是一种为系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。

2023-09-03 20:51:49 289

原创 【翻译】RISC-V指令集手册第Ⅱ卷:特权体系结构

本章描述RISC-V系统中最高权限的机器模式(M-mode)下的机器级操作。M模式用于对硬件平台的低级访问,是复位时进入的第一个模式。M模式还可以用于实现在硬件中直接实现过于困难或代价过高的特性。RISC-V机器级ISA包含一个公共核心,该核心根据支持的其他特权级别和硬件实现的其他细节进行扩展。

2023-08-25 23:06:14 570

原创 CMake学习

PROJECT:指定⼯程的名字和⽀持的语⾔,默认⽀持所有语⾔。指定了⼯程的名字,并且⽀持所有语⾔—建议指定了⼯程的名字,并且⽀持语⾔是C++指定了⼯程的名字,并且⽀持语⾔是C和C++使用该指定隐式的定义了两个CMAKE变量,和,如果改了⼯程名,这两个变量名也会改变。SET:用来显示的指定变量: SRC_LIST变量就包含了main.cpp也可以MESSAGE关键字向终端输出用户自定义的信息- SEND_ERROR,产⽣错误,⽣成过程被跳过。- SATUS,输出前缀为 —— 的信息。

2023-06-07 22:27:16 698

原创 CMake的应用与实践

ADD_DEPENDENCIES(没懂)

2023-05-21 18:38:08 740

原创 Git入门学习

是一种免费开源的分布式版本控制系统,区别于集中式挂历系统(SVN,CVS)的是分布式每人都有一个“档案馆”,而集中式是只有一个“档案馆”。这样的话,如果你使用git进行开发,感觉自己版本做好了,就可以拿着自己版本跟别人的版本进行合并。可以方便的进行协同工作,同时以后出了事故也更好的找人背锅。

2023-05-08 00:04:40 292

原创 Linux内核驱动开发(二)

通过配置GPIO,把相应的GPIO设置成高电平或低电平,达到点灯。LED设备驱动的代码初始化设备核心数据结构初始化设备号major>0 :指定了设备号;major==0:没有指定数据结构注册:添加到内核字符设备链表中,就是说内核可以看到class_create:初始化内核class结构加入到系统,创建设备文件初始化GPIO与初始化正好相反测试LED设备驱动的代码总结 - 遵照规范。

2023-05-07 12:20:43 477

原创 Linux内核驱动开发(一)

linux操作系统历史开发模式git邮件组 mailing listpatch内核代码组成Makfilearch 体系系统架构相关block 块设备crypto 加密算法drivers 驱动(85%)firmware:外设fs 文件系统include 头文件init 启动代码ipc 进程通信代码kernel 内核lib 库mm 内存管理net 网络相关scripts 脚本security 安全相关sound 音频相关tools 工具(perf 测试工具)

2023-02-14 23:08:43 2074

原创 内存中,外部碎片与内部碎片,解决办法

是由于大量信息由于先后写入、置换、删除而形成的空间碎片。为了便于理解,我们将信息比作货物,将存储空间比作仓库来举例子。假设,我们有编号为1、2、3、4、5、6的6间仓库库房,前天送来了一大宗货,依次装入了1、2、3、4、5号仓库,昨天又因故将4号库房的货物运走了,那么数值上说我们还有两间空仓库的空间,但是如果这时候送来两间仓库容量的货物但要求必须连续存放的话,我们实际上是装不下的。这时的4、6号仓库,就成为一种空间的碎片。由于这样的原因形成的空间碎片,我们称之为外部碎片。

2022-09-20 16:06:52 4333

原创 函数调用栈分析

操作系统把磁盘上可执行文件加载到内存运行之前, 需要做很多工作, 其中很重要的一件事就是把可执行文件中的代码, 数据存放到内存 中合适的位置, 并分配和初始化程序运行过程中必须的堆栈, 所有准备工作完成之后操作系统才会调度程序起来运行.进程在内存中布局主要分为4个区域: 代码区, 数据区, heap和stack.

2022-09-06 18:09:46 2179

原创 虚函数表是什么时候生成的,虚函数表地址是什么时候给对象的?

虚函数指针:出于效率考虑,会放在每个对象的地址开始处。虚函数表:属于类,类的所有对象共享这个类的虚函数表。

2022-08-16 14:59:51 2374 5

原创 const 引用作为形参,实际上也是有拷贝存在的

const 引用作为形参,实际上也是有拷贝存在的。

2022-08-14 13:39:49 299

原创 priority_queue 第三个模板参数和sort 的第三个形参的区别

priority_queue 需要的是类型,根据类型,自己类内部定义对象来做;sort 需要的就直接是对象;根据传入对象来实现比较;(仿函数对象,自定义函数对象)传入greater 就是传入类型,因为这只是个类;传入greater() (带括号) 就是构造了一个这个类的对象,传入的是对象;...

2022-08-14 11:30:12 156

原创 STL中sort 用的是快排吗? - 快排、堆排(heap sort)、插入排序

STL中,大数据排序时候,首选了快排;递归深度到达一定程度的时候,选择了堆排;(允许1.5 log2(N) 的递归深度)数据量小到一定程度的时候,选择插入排序;(小于32个数据时候)

2022-08-13 10:07:55 246

原创 Qt多线程的多种方法之一 QThread

QThread 似乎是很难的一个东西,特别是信号和槽。

2022-07-04 14:59:59 461

原创 C++ 内存管理 - malloc/free - 侯捷

malloc/free是C层面的函数

2022-07-01 22:37:28 835

原创 C++ 内存管理 - std::allocator - 侯捷

alloc

2022-06-29 15:41:25 1006

原创 C++ 内存管理 - primitives - 侯捷

C/C++中的new和delete的实现过程

2022-06-27 21:16:36 300

原创 C++11新特性 - 侯捷

侯捷 C++11/14

2022-06-25 22:50:39 459

原创 C/C++中的new和delete的实现过程

下面是《C++ Primer 5th》中P726 对 new 和 delete 过程的解释:当我们使用一条new表达式时,实际上执行了三步操作:当我们使用一条delete表达式时,实际上执行了两步操作:由于不同编译器对new的实现过程不同,所以我们下面以侯捷老师课件来进行详解。假设我们现在有一个类:complex.h我们new一个对象编译器处理new这一语句的时候,先分配复数的内存,然后进行转型,最后调用构造函数,进行了下面三个过程下面是在VS2019上反汇编得到:整体示意图如下:当我们进行 del

2022-06-24 15:45:28 1209 1

原创 C/C++多态/虚函数的原理(实现过程)

面向对象编程有三大特性:继承、封装和多态。其中,多态又分为编译时多态和运行时多态。编译多态是通过重载函数体现的,运行多态是通过虚函数体现的。多态是如何实现的呢?下面举个例子:结果:在例子中那么为什么会出现多态性,其底层的原理是什么?这里需要引出一些相关的概念来进行解释。父类对象模型:子类对象模型:上图中展示了虚表和虚表指针在基类对象和派生类对象中的模型,下面阐述实现多态的过程:(1)编译器在发现基类中有虚函数时,会自动为每个含有虚函数的类生成一份虚表,该表是一个一维数组,虚表里保存了虚函数的入口

2022-06-23 19:04:40 498

原创 C++ 中 typename用法

typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数;看到上面这个例子时,我们脑子里可能会有两种想法:这样的话就会产生异议,由上面的介绍可以知道iterator是类T的静态数据成员,静态成员函数或者是嵌套类型;当我们这样写的时候,C++默认就是解释为一个变量的。所以,为了和变量区分,必须使用typename告诉编译器。如果没有修饰关键词typename编译器可能认为我们是想实现乘法运算;若我们的本意是想定义一个指针时,这是就需要typename来修

2022-06-20 23:55:53 6293

原创 pointer - like classes && functions - like classes

pointer-like classes , 像指针行为的类,C++里一般操作指针的操作符有 和 ,实质上就是类重载了这两个操作符,使得类的行为看起来像指针。一般这种类中都有一个普通的指针。主要分为两种:智能指针和迭代器。为何设计一个类产生的对象要像一个指针,因为你想要它做比指针更多的事情,所以通常这样做出来的东西,又叫做智能指针。1.T* px; px是指向T类型的指针。2.C++里面的操作符重载是很常见的,且是很重要和强大的。智能指针的这两个写法几乎是固定的。智能指针都会有这么一个构造函数:

2022-06-17 17:27:52 143

原创 Qt-Char实现动态波形显示

通过定时器中断,实现简单的曲线动态显示charttest.hcharttest.cpp

2022-06-03 12:55:36 341 1

原创 C++转换函数、non-explicit-one-argument构造函数

本文将参考侯捷老师课程来简单介绍C++中的转换函数(conversion function)。设计一个类Fraction表示分数,包含分子和分母。我们希望它能自动转换为double类型,并参与运算。operator是关键字,它通常和运算符一起使用,表示运算符函数。。double是函数名,表明了将Fraction转换为double类型。(正是由于此处指明了输出类型,所以。编译器会根据函数名决定返回值类型)。const是限制符,表示在该函数内,不会改变数据成员的值。(明确指定const,避免后期维护或重构时,

2022-06-01 02:28:42 249

原创 设计clas注意事项:头文件、inline、成员初值列、new、Big Three

设计clas注意事项:头文件、inline、成员初值列、new、Big Three、const用法等等

2022-05-06 09:00:00 239

原创 什么是系统调用?

01、 系统调用是什么系统内核通过包装一些能够实现特定功能的特殊硬件指令和硬件状态,即为内核函数,通过一组称为系统调用(system call)的接口呈现给用户,为系统调用而封装出来的API也达数百个。为了保护设备,操作系统不可能让所有的程序都能轻松地访问到任何的文件,因此进程在系统上的运行分为2个级别:(1) 用户态(user mode):用户态运行的进程可以直接读取用户程序的数据;(2) 系统态(kernel mode):系统态运行的程序可以访问计算机的任何资源,不受限制;诸如一些修改寄存器内容

2022-05-05 23:53:45 19996

原创 C++ 中 inline 的用法

inline简单介绍

2022-05-04 02:48:27 287

原创 git push 大坑,错误error: src refspec master does not match any. error: failed to push some refs to

今天本来想把内容上传到git仓库去,但是折腾了好久一直报错。error: src refspec master does not match any error: failed to push some refs to 最后原来是github更新了,现在github的默认分支为main,但是,我一直认为是master,所以,在提交时,需要提交到main,而不是master。使用:git push origin main,即可。汇总一下今天一天查到其他人遇到该问题原因:本地git仓库目录下为空

2022-04-14 21:24:23 14934 23

原创 更改WordPress语言设置(例如中文版和英文版转换)

如果你想更改WordPress的语言,比如将英文版转换为中文版,或者将中文版转换为英文版,该如何操作?其实很简单,打开网站根目录下的 wp-config.php,然后搜索 define(‘WPLANG’ )就可以快速定位到语言设置那里,cd /根目录vi wp-config.php使用 ls 可以查看当前目录下内容使用 pwd 显示路径比如简体中文版默认为:define('WPLANG', 'zh_CN');如果要改为英文版,只需修改为:define('WPLANG', '');

2022-04-14 16:57:34 2619

原创 FFT原理 & C++实现简单FFT代码

FFT原理C++实现FFT

2022-04-11 15:29:46 7275

原创 C++求一维数组中极大值

问题描述输入一个数组,输出数组中的极大值。//Qt5.12.3+Vs2019//函数名称:Extremum//函数作用:求数组内极大值,并返回排序好的数组//参数作用:1、accuracy:精度// 2、X:带测数组//函数返回:排序好的数组QVector<QPair<double, int>> Extremum(int accuracy, QVector<double> X) { //创建待处理数组 QVector<double> D

2022-04-10 16:20:52 1582

原创 数据库 基本概念、数据模型、并发控制(一)

基本概念• 数据(data):描述事物的符号记录称为数据。• 数据库(DataBase,DB):是长期存储在计算机内、有组织的、可共享的大量数据的集合,具有永久存储、有组织、可共享三个基本特点。• 数据库管理系统(DataBase Management System,DBMS):是位于用户与操作系统之间的一层数据管理软件。• 数据库系统(DataBase System,DBS):是有数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DataBase Administrator DB

2022-03-21 09:00:00 97

原创 计算机网络 体系与各层协议等(一)

文章目录体系结构、各层作用体系结构、各层作用

2022-03-21 00:35:31 120

原创 操作系统 进程、线程、协程(二)

什么是进程进程-操作系统提供的抽象概念,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。程序本身是没有生命周期的,它只是存在磁盘上的一些指令,程序一旦运行就是进程。当程序需要运行时,操作系统将代码和所有静态数据记载到内存和进程的地址空间(每个进程都拥有唯一的地址空间,见下图所示)中,通过创建和初始化栈(局部变量,函数参数和返回地址)、分配堆内存以及与IO相关的任务,当前期准备工作完成,启动程序,OS将CPU的控制权转移到新创建的进程,进程开

2022-03-20 00:04:42 317

原创 操作系统 进程线程、主机字节序、页面置换算法等(一)

进程线程主机字节序页面置换算法

2022-03-18 21:20:07 157

原创 Effective C++ & More Effective C++(四)

effective c++ 以及 more effective c++总结

2022-03-13 07:00:00 1125

原创 C++ malloc、智能指针、类型转换等(三)

malloc、强制转换、智能指针

2022-03-12 18:25:18 2398

原创 C++ explicit、using、::、decltype 等(二)

explicit、using、decltype

2022-03-11 23:35:53 128

原创 C++中const、static、this指针、inline、volatile、union等(一)

C++基础

2022-03-10 20:05:05 740

原创 使用Git上传项目到GitHub(详细版)

初次使用git上传到GitHub上

2022-02-25 16:49:51 4930 3

堆栈队列等各种数据结构集合

用c++实现大部分数据结构,适合新手学习

2020-12-13

空空如也

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

TA关注的人

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