- 博客(60)
- 收藏
- 关注
原创 eMMC memory介绍
摘要:eMMC是一种集成NAND闪存与控制芯片的嵌入式存储解决方案,采用BGA封装技术。eMMC 5.1标准下顺序读写速度最高可达330MB/s和290MB/s。其架构包含电源管理、控制器及NAND存储三部分,具有启动分区、RPMB安全分区等功能模块。电路设计注重信号完整性,采用阻抗匹配电阻、多级滤波等措施确保高速稳定运行。相比传统存储,eMMC具有体积小、功耗低等优势,但存在擦写次数有限的缺点,需通过坏块管理和磨损均衡等机制延长使用寿命。该技术广泛应用于移动设备存储领域。
2025-11-06 16:49:14
1143
原创 线程池和单例模式
线程池管理器:负责线程池的创建、销毁、参数配置(如核心线程数、最大线程数等)。工作线程(Worker):预先创建线程进行线程等待,循环从任务队列中提取任务并执行。存错待执行的任务(通常是阻塞队列,避免线程空轮询)。定义任务的执行逻辑,线程池执行并接受任务的接口。设计模式是在软件开发中,针对特定问题场景总结出的可复用解决方案,是经过验证的、优化的代码设计经验。它描述了在特定场景下,如何组织类、对象、接口及其交互关系,以解决代码复用、扩展性、可读性等问题。
2025-11-05 17:04:31
752
原创 CMake 详细解析
项目定义[VERBATIM]1.执行时机(必需三选一)时机执行时间使用场景PRE_BUILD在构建目标之前代码生成、文件预处理PRE_LINK在编译后,链接前资源处理、中间文件生成POST_BUILD在构建完成后文件复制、打包、测试2.命令配置参数说明COMMAND要执行的命令(可多个)ARGS命令参数(可选,通常直接写在COMMAND中)命令执行的工作目录DEPENDS命令依赖的文件或目标COMMENT构建时显示的信息VERBATIM避免CMake转义特殊字符。
2025-09-02 17:55:43
1390
原创 linux工具的使用
这两者的主要区别在于它们管理的包格式和工作在不同的 Linux 发行版上。是两种不同的包管理工具,用于在 Linux 系统上管理软件包。
2025-08-27 17:17:20
50
原创 linux 线程互斥
公平锁是一种线程同步机制,它保证线程获取锁的顺序遵循先来先服务(First-Come-First-Served, FCFS)的原则。也就是说,当锁可用时,它会分配给等待时间最长的线程。核心思想:维护一个等待队列,严格按照线程请求锁的顺序来授予锁。
2025-08-27 17:16:50
1148
原创 linux多线程
1.在运行程序中线程是一个执行分支,更准确的说线程是“一个进程内部的控制序列”。2.一个进程至少有一个线程。3.线程是在进程内部运行,本质是在进程地址空间运行。4.再linux内核,线程是一个执行流,在硬件CPU角度,线程就是轻量级进程。5.透过进程虚拟地址空间,可以看到进程的大部分资源合理分配给每个执行流,就形成了线程执行流。终止线程功能:终止当前线程,retval可被其他线程获取等待线程结束功能:阻塞等待指定线程终止,并获取其返回值retval: 接收线程的退出状态分离线程。
2025-08-25 16:15:20
1247
原创 linux 进程信号
信号在人身体层面来讲,是一种“警示”,比如长时间未进食,“饥饿”就是一种信号。生活层面来讲,快递,外卖的到达,也是一种信号。那对于计算机来说,什么是信号呢。硬件层面来讲,分为数字信号和模拟信号数字信号用离散的高电平(1)和低电平(0)表示信息,是计算机内部处理的基础。例如:CPU通过电信号传输二进制指令,USB接口传输数字数据。模拟信号连续变化的物理量(如电压、电流),需通过ADC(模数转换器)转换为数字信号供计算机处理。例如:麦克风捕获的声波、传感器采集的温度数据。
2025-07-25 16:53:28
813
原创 system V共享内存
共享内存(Shared Memory)是一种高效的进程间通信(IPC Inter-Process Communication)机制, 允许多进程直接访问同一块物理内存区域,从而实现快速数据共享,是最快的IPC通信,因不需要在进程间复制,而是直接通过内存间交互通信。
2025-07-17 17:12:15
687
原创 进程通信(命管道)
是系统或应用程序在运行过程中生成的记录文件,用于追踪事件、状态变化、错误信息等。通过分析日志,可以监控系统行为、排查故障、审计安全事件等。
2025-03-24 11:09:01
997
原创 进程间通信(匿名管道)
匿名管道(无名管道)特点:仅用于具有亲缘关系的进程(如父子进程),数据单向流动(半双工),基于内存实现。实现方式:通过pipe()系统调用创建,返回两个文件描述符(读端和写端)命名管道(FIFO)特点:允许无关进程通信,通过文件系统中的路劲名标识,支持阻塞和非阻塞模式。实现方式:使用mkfifo()创建,通过open()和文件读写操作进行通信。注:匿名管道的默认大小通常为64 KB,这意味着它可以缓存最多 64 KB 的数据。如果超过此大小,写入操作会被阻塞,直到管道中的数据被读取并释放空间场景行为。
2025-03-20 13:38:48
853
原创 STL(vector的使用与基础实现)
1.vector是可变大小数组的序列容器(顺序结构)。2.vector采用连续空间来存储元素,这就意味着可以像数组一样用下标访问,但vector可动态改变,它的大小也可被容器自动分配。3.空间不足,插入新元素时,会重新申请空间,将数据拷贝到新空间,释放旧空间。就时间而言。这是一个相对代价较高的任务,因为每当一个新的元素加入容器中,都会有一定几率触发扩容。4.vector分配空间策略:vector会分配一些额外的空间以适应可能得增长,因为存储空间比实际需要的存储更大。
2025-03-14 11:10:56
869
原创 了解string
(4).string类是basic_string模版类的一个实例, 它使用char来实例化basic_string模版类, 并用char_traits和allocator作为basic_taring的默认参数。(5). 注意:这个类独立于左右的编码来处理字节,如果用来处理多字节或变长字符(如UTF-8)的序列, 这个类的做优成员(如长度或大小)以及她的迭代器, 将任然按照字节(而不是实际编码的字符)来操作。(2)在Oj题或者平常工作使用中,String的出现会让对字符串的操作更加检点,方便和快捷。
2025-02-21 17:21:26
717
原创 linux - 软硬链接
Unix/Linux 系统中一种特殊的文件类型,类似于 Windows 中的快捷方式。它是指向另一个文件或目录的引用,允许你在文件系统中创建一个指向目标文件或目录的路径。ls -li 查看软连接指向路径指向路径:软连接保存的是目标文件或目录的路径,而不是直接保存文件内容。它实际上是一个包含目标路径的文本文件。可跨文件系统:软连接可以跨文件系统创建,因为它保存的是目标文件的路径(可以是相对路径或绝对路径)。不同于硬链接,硬链接只能在同一文件系统内创建。符号链接指向。
2024-12-18 17:09:55
1491
2
原创 linux - 存储管理
LBA(Logical Block Addressing,逻辑块寻址)是一种硬盘存储设备的数据寻址方式,它将硬盘的数据视为一个逻辑上的连续块,而不是依赖于物理位置(如柱面、磁道和扇区)。在LBA方式下,硬盘上的每个数据块都有一个唯一的逻辑地址(LBA),这一地址用于标识存储数据的物理位置。LBA 使用单一的逻辑块编号来表示硬盘上的每个数据块,消除了柱面、磁头、扇区之间的物理结构映射,使得硬盘可以支持更大的存储容量。硬盘通常每个盘片都有两个磁头(一个用于盘片的上面,另一个用于盘片的下面),这些磁头通过。
2024-12-13 17:24:55
1334
原创 解析缓冲区
缓冲区(Buffer)实际上是一段临时存储数据的内存区域,用于在不同设备或系统组件之间传输数据时,平衡数据处理速度的不匹配。它通常用于临时存储数据,以便更有效地进行数据读取或写入操作。简单来说,就是临时存储数据的一块内存。那么这块内存,是由谁来维护的呢?两种情况,1.操作系统级别的缓冲区,一般是由操作系统本身来维护,在特定情况下,硬件和应用程序也会参与缓冲区的分配与维护。2.用户级缓冲区,主要是由应用程序和其依赖的库来完成,操作系统提供底层的内存管理支持。
2024-12-09 14:33:47
1160
原创 linux重定向
系统打开文件接口参数说明pathname:要打开的文件的路径。flags:打开文件时的操作模式,用于指定文件如何被打开。O_RDONLY:以只读方式打开文件。O_WRONLY:以只写方式打开文件。O_RDWR:以读写方式打开文件。O_CREAT:如果文件不存在,则创建文件。必须同时指定文件权限(mode)。O_TRUNC:如果文件已存在,并且以写方式打开,则文件内容会被截断为零长度(清空文件)。O_APPEND:文件操作会从文件的末尾开始。O_EXCL:如果指定了O_CREAT。
2024-12-05 15:51:14
1157
3
原创 理解SHELL
Shell是一种命令行界面(CLI)工具,提供了用户与操作系统之间的交互方式。通过 Shell,用户可以执行操作系统的命令、运行脚本、管理文件和系统进程。Shell 通常作为操作系统的一个程序运行在终端窗口中。注: shell本身就是一个进程。
2024-11-29 11:13:03
1028
原创 linux进程控制
当进程调用exec函数的时,该进程的用户空间代码和数据将完全被新进程取代,从新进程的启动历程开始执行,并不是创建新进程,所以进程id并不会发生改变。当父子进程其中一方想要修改数据时,OS会触发页表的“缺页中断”,从而为其重新申请物理内存并映射到页表中,将只读修改读写,原始的物理页面中的数据复制到新的物理页面中。arg0 通常是程序本身的名称,后续参数是程序的命令行参数。非阻塞方式等待,如果只是为回收子进程其实跟阻塞等待,并没有区别,我们可以让父进程在等待的时候做一些轻量级的任务,做一个dome来看看吧。
2024-11-22 14:43:53
1022
原创 进程地址空间
我们来看一段代码int main()return 0;//child,子进程肯定先跑完,也就是子进程先修改,完成之后,父进程再读取g_val=100;sleep(1);return 0;fork为什么会同时返回两个值,打印出来的地址是相同的,而当子进程修改数据后,父子打印出来了不同的值?
2024-11-15 17:13:00
810
1
原创 linux进程概念
但是到我们手里的数据会很杂乱,有很多我们并不需要的属性也会掺杂其中,为了解决这个问题,我们就想到能不能把我们所需要的数据属性“描述”一下,比如(学生的姓名,学号,性别等),然辅导员按照我们“描述的模板”进行数据收集,这时候对我们会很方便的进行管理。操作系统(校长)对底层硬件的管理(学生),也是先描述,用struct结构体,通过驱动(辅导员)获取我们所需的数据,最后将这些获得数据以特定的结构组织管理起来,这就使得我们的操作系统很好的管理我们的软硬件资源。可父进程如果一直不读取,那子进程就一直处于Z。
2024-11-08 17:39:39
1173
1
原创 linux环境变量
libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时,需要用extern声明。如果想让我们的命令也可以和系统命令一样,不需要携带路径直接运行,我们也可以将我们的可执行路径配置到我们的环境变量中。我们可以通过echo $PATH 命令来查看其系统配置的路径,而像“PATH”就是我们系统配置的环境变量之一了。发现没有,执行我们的自己写的程序需要指定路径,而执行系统命令却不需要。环境变量具有全局属性,可以被子进程继承下去,还记得我们是如何定义环境变量的吗?
2024-11-01 15:14:06
1075
1
原创 linux工具的使用
在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通常包管理器可以很方便的获取到这个编译好的软件包,直接进行安装,软件包河软件包管理器,就好比"App"和"应用商店"这样的关系.
2024-09-10 14:29:44
1179
原创 SQLite数据库(备份)
除了SQLITE_OK和SQLITE_DONE,调用sqlite3_backup_step()可能会返回SQLITE_READONLY、SQLITE_NOMEM、SQLITE_BUSY、SQLITE_LOCKED或SQLITE_IOERR_XXX扩展错误代码。如果没有sqlite3_backup_step()错误发生,sqlite3_backup_step()是否完成,sqlite3_backup_step()返回的值是SQLITE_OK。如果在调用sqlite3_backup_step()
2024-09-03 16:53:28
2138
5
原创 组播(UDP)
组播(Multicast)是一种允许数据从源地址发送到多个目标地址的通信方式,它介于单播和广播之间。组播数据报并不是基于IP数据报的目的地址,而是通过RTF(Reverse Path Forwarding)逆向路径转发的方式转发数据包,确保数据只发送到需要接受的组播组成员。组播提高了数据传输效率,减少了骨干网络出现拥塞的可能性,特别适用于一对多的通信场景。
2024-08-27 17:43:19
5101
4
原创 C++(模版)
函数模版代表了一个函数家族,该函数模版与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。类模版的实例化与函数模版实例化不同,类模版实例化需要再类模版后面跟<>, 将需要实例化的类型放入<>中。在编译器编译阶段,对于模版函数的,编译器会根据传入的实参类型进行类型推演,生成对应的类型以供调用。函数模版不是函数,是编译器使用方法产生特定具有类型函数的模具。注: 类模版类名不是真正的类, 而实例化后的结果才是类。用不同类型的参数使用函数模版时,成为函数模版的实例化。模版参数调用匹配原则。
2024-08-16 14:52:37
334
1
原创 c++(内存管理)
malloc/free 和 new/delete 共同点:都是从堆上申请空间,需要用户手动释放不同点:malloc和free是函数,new和delete是操作符malloc申请的空间不会进行初始化,new申请的空间会调用构造函数进行初始化malloc申请空间时需要手动计算其大小,new只需要后面跟类型即可,如果是多个元素,只需[]中指定对象数即可malloc返回的是void* 使用时必须强转,new使用时不需要,因为new后面跟的是空间类型。
2024-08-15 11:01:37
1442
1
原创 类和对象(下)
注:内部类就是外部类的友元类(内部类可以定义在外部类的public, protected, private都是可以的, 内部类可以直接访问外部类的static成员,不需要外部类的对象/类名, 使用sizeof计算外部类时, 和内部类没有任何关系)一个类定义在另一个类的内部, 这个内部类就叫做内部类,内部类是一个独立的类, 它不属于外部类,更不能通过外部类的对象去访问内部类的成员。注:尽量使用初始化列表,因为无论你是否使用初始化列表,对于自定义类型的成员变量,一定会先使用初始化列表初始化。
2024-08-14 10:42:28
1117
原创 类和对象(中)
注:赋值运算符,只能重载为成员函数,不能重载为全局函数(因赋值运算符如果不显示实现,编译器会自动生成一个默认的,此时用户再类外自己实现一个全局的赋值运算符重载,就会和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数)生成s1的时候,使用s拷贝构造,而Stack类并没有显示定义拷贝构造函数,则编译器会给Stack类生成一份默认的拷贝构造函数,默认拷贝构造函数是值拷贝,即将s的内容原封不动的拷贝给s1,因此s和s1指向同一块空间,拷贝构造的调用场景:1.使用已存在对象创建新对象。
2024-08-12 16:52:39
1056
原创 QT(2.0)
QTextEdit表示多行输入框,也是一个富文本&markdown编辑器,并且能在内容超出编辑框范围时自动提供滚动条。核心属性属性说明markdown输入框内持有的内容,支持markdown格式,能够自动的对markdown文本渲染成htmlhtml输入框持有的内容,可以支持大部分html标签,包括img和table等输入框为空时提醒的内容readOnly是否是只读的是否开启undo/redo功能按下ctrl+z触发undo按下ctrl+y触发redo开启自动格式化。
2024-08-07 18:00:15
1210
3
原创 Linux【文件权限的理解】
常见的Shell命令包括文件和目录操作命令(如ls、cp、mv、rm等)、系统管理命令(如ps、top、kill等)、文本处理命令(如grep、awk、sed等)、以及其他一些用于网络、用户管理、进程控制等方面的命令。这些人和实体不仅贡献代码,还提供支持、教育和培训,构建了一个强大的生态系统,推动了 Linux 的普及和发展。总体而言,操作系统在计算机科学中扮演着极为重要的角色,它不仅仅是一个连接硬件和软件的桥梁,更是整个计算机系统的管理者和协调者,为用户和应用程序提供了一个安全、高效、友好的工作环境。
2024-07-15 11:21:32
1078
原创 QT(超详细从0开始)
/生成一个button,指定它的父元素this,也就是Widgetbutton->setText("按钮");delete ui;//定义槽函数widget.hQ_OBJECTpublic:~Widget();//槽函数声明,在QT5以上版本可不写slots,但为区分还是可以将其写上private:我们将上面的代码进行修改,让它每次点击发送一个信号,通过关联这个信号去打印一段文字。
2024-06-17 13:45:49
5297
2
原创 类和对象(上)
移动构造函数是C++11新增的一种构造函数,它接受一个右值引用作为参数,并且将其内部状态移动到新创建的对象中。: 拷贝构造函数是用于复制一个对象的构造函数,它接受一个同类型的对象作为参数,并且会创建一个新的对象,该对象的成员变量与参数对象相同。构造函数可以用来初始化对象的成员变量,确保对象在创建时拥有合适的状态。: 默认构造函数是没有参数的构造函数,如果没有定义任何构造函数,则编译器会自动生成一个默认构造函数。: 带参数的构造函数是可以接受参数的构造函数,可以通过它来初始化对象的成员变量。
2024-06-04 16:52:06
1019
原创 C++(入门基础版本)
C++ 是一种通用的、面向对象的编程语言,是 C 语言的一个超集,也就是说,任何有效的 C 程序都是有效的 C++ 程序。C++ 通过添加诸如类和对象、继承和多态等概念,扩展了 C 语言的功能,使其更适用于大型软件项目和复杂系统的开发。以下是 C++ 的一些重要特性和概念:1.面向对象编程(OOP):C++ 是一种面向对象的编程语言,支持类和对象的概念。通过封装、继承和多态,可以实现更清晰、模块化的代码结构,并提高代码的可重用性和可维护性。
2024-05-30 17:13:48
3086
原创 makefile 编写规则
Makefile 是一种文本文件,用于描述软件项目的构建规则和依赖关系,通常用于自动化软件构建过程。它包含了一系列规则和指令,告诉构建系统如何编译和链接源代码文件以生成最终的可执行文件、库文件或者其他目标文件。
2024-05-24 17:31:31
1740
1
原创 普通二叉树
二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。每个节点包含一个值,并且可能有一个指向其左子节点和右子节点的指针(引用)。二叉树具有以下特性:1.根节点(Root): 树的顶部节点,没有父节点。2.节点(Node): 树中的每个元素。3.父节点(Parent): 一个节点的直接上级节点。4.子节点(Child): 一个节点的直接下级节点,分为左子节点和右子节点。5.叶节点(Leaf): 没有子节点的节点称为叶节点或叶子。
2024-05-21 16:08:56
1046
1
原创 应用层协议【HTTP和HTTPS】
也可以是基于软件的,譬如维基百科用到的就是Nginx。那采用HTTPS后,到底会多用多少服务器资源,2010年1月Gmail切换到完全使用HTTPS, 前端处理SSL机器的CPU负荷增加不超过1%,每个连接的内存消耗少于20KB,网络流量增加少于2%,由于Gmail应该是使用N台服务器分布式处理,所以CPU负荷的数据并不具有太多的参考意义,每个连接内存消耗和网络流量数据有参考意义,这篇文章中还列出了单核每秒大概处理1500次握手(针对1024-bit 的 RSA),这个数据很有参考意义。
2024-05-16 11:09:31
1477
5
原创 树形数据结构---堆
我们能够看得出来这是一个大堆,这颗像树一样的图是它的逻辑结构,而底下的数组是它的物理结构,也就是说,我们真正操作的是数组。堆的特点是每个节点都满足堆的性质,即父节点的键值总是大于或等于(小于或等于)任何一个子节点的键值。堆分为最大堆和最小堆两种类型,其中最大堆的根节点键值是所有节点中最大的,最小堆的根节点键值是所有节点中最小的。堆在计算机科学中有着广泛的应用场景,其中最常见的应用之一是优先队列。5. **堆在操作系统中的应用**:堆内存管理是操作系统中的一个重要部分,用于动态分配内存给进程。
2024-05-09 18:22:20
1274
原创 二叉树的(前,中,后序)遍历
7. **二叉搜索树(Binary Search Tree)**:二叉搜索树是一种特殊的二叉树,其中每个节点的值大于其左子树中的所有节点的值,且小于其右子树中的所有节点的值。9. **完全二叉树(Complete Binary Tree)**:对于深度为d的二叉树,除了第d层之外,其他层的节点都必须是满的,并且第d层的节点从左到右填入,称为完全二叉树。这些子节点分别称为左子节点和右子节点。叶子节点的高度为0。1. **根节点(Root)**:二叉树的顶端节点称为根节点,它没有父节点,是树的起始点。
2024-04-22 10:29:56
1587
1
原创 【游戏专区】贪吃蛇
Windows 这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外, 它同时也是⼀个很⼤ 的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启 视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application), 所以便 称之为 Application Programming Interface,简称 API 函数。7. **分数计算**:游戏通常会记录玩家的得分,得分的计算方式可以是蛇吃到食物的数量,也可以是蛇移动的步数等。
2024-04-19 14:35:13
1470
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅