自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++虚函数表

但每一个含有虚函数的对象实例会在内存中持有一个指向虚函数表的指针,这个指针通常称为虚函数表指针(Virtual Table Pointer,通常简称为 vptr)。也就是说,你可以使用指向基类的指针或引用来调用实际指向的派生类对象的虚函数,这个决定是在运行时(Run-time)做出的。:在派生类的构造函数被调用时,虚函数表指针会被重新设置,以指向派生类自己的虚函数表。总的来说,虚函数的工作原理主要是通过虚函数表和虚函数表指针来实现的,而多态性是通过动态分发和这种间接调用机制来体现的。

2023-09-04 19:47:17 253 1

原创 单例模式——懒汉模式和饿汉模式

如果对象很小,或者初始化开销不大,或者多线程同步不是问题,懒汉模式是一个好选择。如果要确保实例绝对的唯一性,不担心初始化开销,或者需要确保多线程环境下的安全性,饿汉模式可能更适合。在懒汉模式(Lazy Initialization)中,对象的实例化被推迟到真正需要时进行。这就意味着,除非明确地请求一个对象的实例,否则该对象将不会被创建。在饿汉模式(Eager Initialization)中,对象在程序启动时就被创建,无论是否会用到这个对象。这样做的好处是对象只在需要时才被创建,节省资源。

2023-09-01 14:08:38 173 1

原创 C++设计模式 任务队列与单例模式

如果一个对象被频繁地创建和销毁,但每次都提供相同的功能,那么这种资源消耗是没有意义的。使用单例模式的懒汉式初始化,对象只有在第一次被需要时才会被创建。如果多个实例可能会导致不一致的结果或状态冲突,那么确保一个类只有一个实例可能是有意义的。使用单例模式,您可以在一个地方管理这种全局状态,而不是将状态散布在多个对象中。任务队列是一种常用的并发设计模式,用于将多个任务放入一个队列,然后由一个或多个工作线程来执行这些任务。下一章我们再介绍C++中单例模式的实现方法懒汉式、饿汉式、线程安全的懒汉式单例模式的创建。

2023-08-31 21:32:51 317

原创 C++设计模式几大基本设计原则

开放封闭原则是面向对象设计原则之一,它指出软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。这意味着你的代码应该允许在不修改现有代码的情况下添加新功能。依赖倒转原则主张高层模块不应该依赖低层模块,两者都应该依赖其抽象。

2023-08-30 12:48:15 681 1

原创 C/C++编译器优化之 volatile、inline

inline可以减少不必要的栈开销。当一个函数被标记为inline时,编译器会尝试将函数体直接嵌入到每个调用点,从而消除函数调用的额外成本。将参数压入栈。跳转到函数所在的内存地址。在新的栈帧中执行函数体。将返回值存储在一个特定的位置。清理栈并跳回到调用者。这些步骤需要额外的时间和空间开销。特别是当函数非常简单(例如,只是一个简单的数学运算)时,函数调用的开销可能会成为性能瓶颈。通过使用inline,编译器可能会将函数体直接插入到调用点,从而消除这些开销。inline。

2023-08-28 21:49:15 366

原创 C++设计模式——UML类图

在本示例代码中没有显示,但通常如果一个类使用了另一个类的方法或属性,那么这通常表示为依赖关系。在UML中,依赖关系表示一个类依赖于另一个类的定义。这通常是一个相对较弱的关系,并且通常表示为一个带箭头的虚线。在UML类图中,抽象类的名称通常会用斜体表示。如果一个C++类中包含至少一个纯虚函数(pure virtual function),那么这个类就是抽象的。如果一个类继承自另一个类,那么在UML中,两者之间用一条带有空心箭头的直线连接。箭头从子类指向父类。在UML中,类表示为一个矩形框,分为三个区域。

2023-08-28 21:04:48 2420 1

原创 STM32中标准输入输出导致的程序崩溃问题

STM32中标准输入输出导致的程序崩溃问题,keil中要慎用标准输入输出!

2023-08-24 19:09:05 339 1

原创 TCP/UDP一些机制的理解

TCP(传输控制协议)是面向字节流(byte-stream)的。在TCP连接中,发送方和接收方各有一个缓冲区。发送方按照字节流的方式将数据送入其缓冲区,然后TCP层将缓冲区中的数据分成合适大小的段(segments),并发送到接收方。接收方的TCP层将这些段重新组装成一个连续的字节流,并放入接收方的缓冲区,最后由接收方的应用程序进行读取。TCP保证数据之间的顺序和数据的可靠传输。相对于TCP,UDP(用户数据报协议)是面向数据报(datagram)的。

2023-08-21 21:02:59 78 1

原创 Git构建工具入门

做文档类、代码类工作的人,最需要的就是备份,更具体来讲不仅仅是对文档的备份,而是对整个文档修改历史的备份,这样才可以让我们在意外情况中尽量减少损失,便需要使用git工具。

2023-08-15 21:34:08 174 1

原创 GitHub基础使用——上传与下载

github上传和下载项目

2023-08-15 19:07:29 136 1

原创 Linux网络编程——网络配置

网络编程是指通过计算机网络进行数据交换和通信的编程技术。它涉及处理网络协议、数据传输和通信连接等方面的知识。以下是一些网络编程的基本概念:1、网络协议网络协议是计算机网络中用于确保不同设备之间通信的规则和约定。常见的网络协议包括TCP(传输控制协议)、UDP(用户数据报协议)、IP(因特网协议)等。2、套接字(Socket)套接字是网络编程中用于建立网络连接和进行数据传输的一种抽象概念。通过套接字,程序可以通过网络与其他设备进行通信。(1)、套接字是网络通信的端点,它用于在不同计算机之间进行数据传输。

2023-08-02 08:49:26 287

原创 《linux系统编程 —— 7.IPC对象之信号量 》

通俗的来讲,信号量是用来调度进程间通信顺序的一种方法。信号量本质上是一个数字,用来表征一种资源的数量,当多个进程或者线程争夺这些稀缺资源的时候,信号量用来保证他们合理地、秩序地使用这些资源,而不会陷入逻辑谬误之中。

2023-07-17 17:31:06 163 1

原创 《linux系统编程 —— 6.IPC对象之共享内存 》

共享内存,顾名思义,就是通过不同进程共享一段相同的内存来达到通信的目的,由于SHM对象不再交由内核托管,因此共享内存SHM对象是众多IPC方式最高效的一种方式,但也因为这个原因(当多段进程同时需要访问一段共享内存时,会产生竞争),SHM一般不能单独使用,而需要配合诸如互斥锁、信号量等协同机制使用。

2023-07-15 16:50:52 125 1

原创 《linux系统编程 —— 5.IPC对象之消息队列 》

各种不同的IPC其实是在不同时期逐步引入的,在UNIX伯克利版本system-V(念作系统五,V是罗马数字,是Unix伯克利分支的版本号)中引入的三种通信方式(消息队列、共享内存和信号量组)被称为IPC对象,它们有较多共同的特性:也就是说,如果要实现多个进程间的通信管理,使之相互关联。可以通过 创建/打开同一个 IPC对象进行联调实现。 以下命令可以帮助更好了解系统IPC。 查看所有ipc对象: ipcs -a查看当前系统的消息队列对象:ipcs -q查看当前系统的共享内存:ipcs -m

2023-07-15 16:04:12 371 2

原创 《linux系统编程 —— 4.IPC之信号》

信号是在操作系统中用于通知进程发生某个事件或异常的一种机制。它是进程间通信和处理异步事件的一种方式。朋友可能在房间收拾完毕之前就已经在按门铃了,因此只能是在门铃响起之前做好所需的准备,这个我们即将要学习的信号处理如出一辙:基本概念包括:1. 信号的触发:信号可以由操作系统、其他进程或进程自身发送给目标进程。触发信号的事件可以是各种系统事件,如按下Ctrl+C键、子进程终止、定时器超时等。2. 信号的处理:接收到信号的进程可以通过注册信号处理函数来对信号进行处理。

2023-07-14 08:58:21 119 1

原创 《linux系统编程 —— 3.IPC之管道(下)》

具名管道是跟匿名管道相对而言的,从外在形态上来看,具名管道更接近普通文件,有文件名、可以open打开、支持read()/write()等读写操作。具名管道通常又被称为FIFO(First In First Out),这其实所所有管道的基本特性,那就是放入的数据都是按顺序被读出,即所谓先进先出的逻辑。当然,管道并不是普通文件,具名管道特性:1、与PIPE一样不支持定位操作lseek()2、与PIPE一样秉持相同的管道读写特性3、使用专门的接口来创建:mkfifo()(匿名管道是pipe()

2023-07-13 09:50:47 109 1

原创 《linux系统编程 —— 3.IPC之管道(上)》

IPC (Inter-Process Communication) 是指进程间通信的技术和机制。在操作系统中,不同的进程可能需要相互交换信息、共享资源或协调工作,而 IPC 提供了一种机制,使得这些进程可以进行有效的通信和数据交换。IPC 提供了各种通信方式和机制,包括管道、消息队列、共享内存、信号量、套接字等。这些机制允许进程之间进行数据传输、同步操作、共享资源等,以实现进程之间的协作和通信。通过使用 IPC,进程可以在共享资源的基础上进行协同工作,实现数据共享、任务协作和系统集成。

2023-07-11 20:56:36 195 1

原创 《linux系统编程 —— 2.进程的相关API》

主要功能:1、阻塞当前进程。2、等待其子进程退出并回收其资源。接口解析:1、如果当前进程没有子进程,则该函数立即返回。2、如果当前进程有不止1个子进程,则该函数会回收第一个变成僵尸态的子进程的系统资源。3、子进程的退出状态(包括退出值、终止信号等)将被放入wstatus所指示的内存中,若wstatus指针为NULL,则代表当前进程放弃其子进程的退出状态。int main()printf("[%d]: 我将在3秒后正常退出,退出值是88\n", getpid());i>=0;i--)

2023-07-10 21:25:46 322 1

原创 《linux系统编程 —— 1.进程的概念》

顺序执行无法执行不同的任务,例如无法在触摸屏阻塞等待时显示系统时间。这就需要并发来执行不同的任务。又例如在动态壁纸显示时,触摸函数依旧会阻塞动态壁纸的切换显示。此外,我们可能需要通过一个程序去控制另外一个程序,这就需要实现不同程序之间的通信。 因此,我们需要引入系统编程(并发编程)去解决这些问题。用于实现多个任务和实现不同程序之间的数据交流和协作。

2023-07-10 16:27:51 193 2

空空如也

空空如也

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

TA关注的人

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