Stephan14 Blog

享受编程,信仰技术

中断与异常机制

中断与异常的详细介绍

软件与硬件的工作 中断、异常机制实际上是现代计算机系统中的核心机制之一,主要工作是由硬件和软件相互配合来完成的,通过软硬件的配合使计算机的能力得到充分地发挥。在这个机制工作过程中,硬件实际上是捕获中断源发出的各种中断、异常的请求,同时把控制权转交给特定的处理程序来完成这个过程,称这个过程为中断异常的响应。软件的工作就是识别中断、异常类型完成对应的处理,实际上就是处理程序,称这个程序为中断、异...

go语言interface

interface使用介绍

背景 接口是一种约定,它是一个抽象的类型,和我们见到的具体的类型如int、map、slice等不一样。具体的类型,我们可以知道它是什么,并且可以知道可以用它做什么;但是接口不一样,接口是抽象的,它只有一组接口方法,我们并不知道它的内部实现,所以我们不知道接口是什么,但是我们知道可以利用它提供的方法做什么。 抽象就是接口的优势,它不用和具体的实现细节绑定在一起,我们只需定义接口,告诉编码人员...

C++构造函数

深入理解拷贝构造函数

背景 最近研究了一下c++拷贝构造函数,发现了一个以前不知道的密码,首先,我简单写了如下的代码。 #include <iostream> using namespace std; class A { public: A(int i = 0):val(i){ cout << "construct" << endl; ...

C++构造函数与析构函数

异常处理的问题以及解决方案

背景 最近写代码时想在构造函数中使用异常处理,在语法上来说,构造函数和析构函数都可以抛出异常。但是,在看别人的代码的时候,发现少有人这么使用,然后就好奇的查了一下,下面的内容都是参考多个博客总结出来的。 构造函数 如果在构造函数中抛出异常可能导致一下两种结果: 析构函数不被执行 内存泄露(可以理解为由于析构函数不执行导致的) 析构函数不被执行 C++仅能 delete 被...

处理机调度

实时系统中的调度

实时调度算法 目前业界比较认可并且已经成为标准的实时调度算法有两个: 最优动态优先级调度算法:最早截止优先级调度算法(EDF) 最优固定优先级调度算法:单速率调度算法(RMS) 调度算法分类 抢占和非抢占调度 根据任务运行的过程中能否被中断的情况,把调度算法分为抢占和非抢占两种。在抢占式调度算法中,正在运行的任务可以被其他任务打断。在非抢占式调度算...

信号量

互斥访问与条件同步

背景 在多个进程或者线程读写数据的时候,最终结果依赖于多个进程指令执行的顺序。为了解决这种问题,科学家们提出了几种并发机制,例如:信号量,管程,自旋锁,消息传递等机制。这里先来介绍一下信号量。 原理 信号量是用于进程之间传递信号的一个整数值,这里由sem表示。在信号量只有三种操作可以进行:初始化,P操作,V操作,这三种操作都是原子操作。 P操作: sem = sem - 1; 如...

寻址方式

基础介绍

立即寻址 操作数 = A 优点 节省时间 缺点 数的大小受到地址字段的限制 直接寻址 EA = A 即指令里保存的是操作数的地址 间接寻址 EA = (A)即指令里包含了了存储器的一个地址,该地址所指向的空间里保存了操作数的地址 缺点 需要两次访问存储器:第一次获取操作数的地址,第二次获取操作数的值 寄存器寻址 EA = R 类似于直接寻址,但是不是在内存中寻址,而是在寄存器中寻址...

NULL与nullptr

C++ 空指针

C中的NULL 一直很好奇C++为什么有NULL和nullptr两种值,所以就自己查了一些资料研究一下。原来早在1972年,C语言诞生的初期,常数0带有常数及空指针的双重身分。C使用preprocessor macro NULL表示空指针,让NULL及0分别代表空指针及常数0,在C语言中NULL实际被定义如下: #define NULL ((void *)0) 也就是说NULL实际上是一...

单例模式

三种单例模式的C++实现

单例模式效果 通过单例模式,可以做到以下三点: 确保一个类只有一个实例被创建 提供了一个对对象全局访问的指针 在不影响单例类的客户端的情况下允许将来有多个实例 单例模式优缺点 单例模式优点 跨平台:使用合适的中间件可以把Singleton扩展为跨多个计算机工作 适用于任何类:只要将初始化函数设为私有,并增加相应的静态函数和变量,就能把类变成Singleton ...

C++继承

根据基类指针判断指针指向的子类

背景 近期突然自己想到了一个问题:如果我现在有一个基类,它有很多个子类。同时现在又有一个基类指针,它指向一个子类,但是我不知道其具体是哪一个子类,所以如果我想知道它实际指向哪个子类在java中可以有instanceof可以实现,而在C++中怎么实现呢? 解决方案 后来我想了一段时间,终于想明白了,在C++中如果想在运行而不是在编译的过程中获得对象的具体的类型,那么就必须要用到虚函数。其实虚...