2 KingOfMyHeart

尚未进行身份认证

我要认证

会好起来的.

等级
TA的排名 2w+

硬件中断和软中断的区别

中断中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。硬件中断硬件中断是一个异步信号, 表明需要注意, 或需要改变在执行一个同步事件.硬件中断是由与系统相连的外设(比如网卡 硬盘 键盘等)自动产生的. 每个设备或设备集都有他自己的IRQ(中断请求), 基于IRQ,CPU可以将相应的请求分发到相应的硬件驱动上(注: 硬件驱动通常是内核中

2020-08-14 20:21:07

区分操作系统中的中断、异常以及系统调用的概念

1. 中断:源于外设来源于格式各样的**硬件设备(注意是来自于的硬件设备的)**产生事件,常见的有以下:系统对于用户敲击键盘的响应;系统对于用户移动鼠标的响应;网卡收到来自网络的数据时系统给予响应(epoll的实现依赖于此中断);磁盘中断、显卡、声卡等事件的响应。2. 异常:OS被动处理意想不到的事件,来源于非法的指令、恶意程序或者合法程序执行到了不可预期的指令等,常见异常如下:运算过程中执行了除零操作;进程占用内存资源过高,如OOM;程序中访问了不该访问的地址空间,如其他进程的地

2020-08-14 17:39:11

操作系统是如何启动的呢

1. 计算机基本组成:冯诺依曼体系结构冯诺依曼结构基本组成包括五部分:逻辑运算器控制器输入设备输出设备内存2. 操作系统的启动过程:2.1 BIOS:Basic Input Output System 基本输入输出处理系统BIOS是我们计算机启动加载到内存上的第一个小程序,也叫固件,即随着机器的上电和掉电而运行和停止;主要作用:进行自检,检查各种各样的设备是否可以正常运行(如显卡驱动、键盘、鼠标、磁盘等);将一个特殊的小程序Bootloader加载到内存中运行。2.2 B

2020-08-14 17:11:14

使用C++11多线程模拟多窗口售票出现的常见问题分析总结以及最终解决方案

1. 单线程(单窗口)卖票static int Count = 100;void SellTicket() { while (Count > 0) { Count--; }}如果在单线程环境下,该方法永远不会出错,因为不会产生竞态条件,那么什么是竞态条件。2. 竞态条件多线程环境中,无论线程如何随着调度算法的不同产生不同的执行顺序,运行结果总能保持一致性。3.1 第一个多线程版本:锁加到循环外边static int Count = 100;std::mutex tex;

2020-08-08 15:23:18

C++关键字------volatile

class foo {public: foo(int m):m_(m){} ~foo(){}protected: volatile int m_;};volatile的两个作用:防止线程将变量拷贝搭配CPU的缓存中,这样保证CPU每次取值都去内存中取,保证多线程访问该数据的一致性;防止编译器对操作该变量的指令进行优化调序,以免发生意想不到的事情。另外,volatile修饰指针时和const一样,位置不同可能会构成不一样的类型,判断重载时,也需要考虑volatile

2020-08-04 19:34:19

C++之赋予成员可变的性质-----mutable

class foo{public: foo(int data):ma(data){ cout<<"foo::foo(int)"<<endl; } void add()const{ ma++; } void show(){ cout<<"ma = "<<ma<<endl; } mutable int ma;};int main(){ foo f = 100

2020-08-03 20:40:53

C++中禁止隐式构造对象的方式---explicit

class foo{public: //explicit foo(int data):ma(data){ cout<<"explict foo::foo(int)"<<endl;} foo(int data):ma(data){ cout<<"foo::foo(int)"<<endl; } void show(){ cout << "ma = "<<ma<<endl; } int ma;}

2020-08-03 20:32:35

C++继承多态之多态构成原理(对象内存结构、虚函数指针、虚函数表详解以及编译和运行时绑定)

1. 虚函数指针vfptr与虚函数表vftableclass Base {public: Base(int data) :ma(data) { cout << "Base(int data)" << endl; } ~Base() { cout << "~Base()" << endl; } virtual void show() { cout << "Base::show()" << endl; }

2020-08-03 20:23:19

C++继承多态之什么样的函数可以被写成虚函数呢?

1. 构成虚函数需要满足的条件class Base {public: Base(int data) :ma(data) { cout << "Base(int data)" << endl; } ~Base() { cout << "~Base()" << endl; } virtual void show() { cout << "Base::show()" << endl; } virtual

2020-08-02 21:46:11

C++继承与多态之继承中基类与派生类的成员方法存在的关系(重载、隐藏、重写)

重载隐藏重写,也叫覆盖

2020-08-02 20:50:59

C++11新语法之=delete、=default

1. 相关知识点盘点如果我们不去给一个类实现构造函数,那么编译器会给我们实现一个什么都不做的空构造;如果我们不去给一个类实现析构函数,那么编译器会给我们实现一个什么都不做的析构函数;如果我们不希望外部使用一个接口,最常见得手法是将其私有化。2. =delete :删除一个函数,删除后函数将无法被使用这里假设,我们需要一个不能在堆上构造对象的类,那么就需要将new和delete运算符重载禁用掉:1.将new和delete运算符重载重载私有化,那么用户无法构造;class foo {public

2020-08-02 17:43:07

如何实现一个只能在堆或者栈上构造对象的类

1. 如何创建一个只能在栈上创建对象的类:思路:那就是不能使用new生成对象了,然后我们把new运算符重载和delete运算符重载不给外部暴露即可。code:class AA{private: void* operator new(size_t){} void operator delete(void*){} //重载了new就需要重载deletepublic: AA() { cout << "AA()" << endl; } ~AA() { c

2020-08-02 17:18:57

C++11新语法之继承构造函数

1. 回忆继承我们知道,在C++的继承体系中,子类继承父类时,会将父类除了构造函数和析构函数以外的所有数据都继承下来。子类中如果有与父类名字相同的方法,子类将隐藏父类方法,优先使用子类方法。划重点:子类继承不会继承父类的构造和析构函数,同名方法会被子类隐藏。2. 继承构造函数语法:using Base::Base正因为子类没法继承父类的构造函数,所以我们在C++11之前,需要在子类的初始化列表中显式的调用基类的构造函数或者默认构造函数。基类,有三个构造函数的重载版本:class Base{p

2020-08-02 16:52:55

C++11新语法之std::bind简介与使用

#include <vector>#include <iostream>#include <algorithm>#include <functional>#include <string>void Fun1(){ std::cout<<"Call Fun1()"<<std::endl;}int...

2020-08-02 16:22:21

C++11新语法之委托构造函数

1. 委托构造函数的使用场景在实际的开发中,为了满足不同用户的不同需求,我们的一个类可能会有很多构造函数的重载版本,特别的,这些重载版本的工作内容有的比较复杂,有的比较简单,并且他们之间会有一些交叉重复的工作,即一些代码、或者数据的初始化在每个构造函数中都会去写一遍,这样显得代码特别的臃肿丑陋,委托构造函数应运而生。2. 使用委托构造函数实例:允许在一个构造函数的初始化列表中调用另外一个构造函数,委托另外一个构造函数进行一些初始化工作2.1 在没法进行委托构造时我们的code可能是这样的:class

2020-08-01 17:09:42

C++11新增关键字override

1. C++中常见的成员方法的关系重载 overload : 在同一作用域下,函数名相同,参数列表不同,构成重载隐藏 overhide :在继承体系中,子类中方法与父类方法的名称一样,在子类中,会将父类的同名方法隐藏重写 override : 在继承体系中,子类重新实现父类的虚函数为己所用,(函数名和参数列表形同)2. C++11中新增override关键字:增强代码可读性,显式的告诉编译器我这个方法覆盖的是子类的某个虚函数,也防止程序员疏忽class Base {public:

2020-08-01 16:14:51

C++11新增关键字final

看到这个关键字大家很容易的能将它翻译成为最终的,不可更改的。是的,这个字在我们C++代码中也是这意思,用在继承体系中,修饰类或者修饰基类中的虚函数。1. 修饰类:表示这个类是最终的,不能被其他类继承,也就不能被改写了//被final修饰的类class Base final{public: Base(int data) :ma(data) { cout << "Base(int data)" << endl; mc = data; } Base() = def

2020-08-01 15:43:31

C++继承与多态之基类与派生类自下而上的转换

全文,遵循一个逻辑,具体示例思想:车可以看作是一个基类,公交车可以看是一个车的派生类,我们可以说大巴车是(转换成)车,但绝对不能说车是(转换)大巴车,因为可能是小轿车,也可能是火车。允许从下到上的转换,即将派生类对象赋予基类对象:class Base {public: Base(int data) :ma(data) { cout << "Base(int data)" << endl; } Base() = default; ~Base() { co

2020-07-30 22:05:42

C++继承与多态之继承中派生类对象的构造方式与顺序

1. 在构造派生类对象时,先构造基类部分,最后构造派生类部分我们知道,构造函数的初始化列表的执行先于构造函数体内代码的执行。我们要想在构造派生类之前将基类构造好,那么就必须将基类的构造放在派生类对象的构造函数的初始化列表中。class Base {public: Base(int data) :ma(data) { cout << "Base(int data)" << endl; } ~Base() { cout << "~Base()" &lt

2020-07-29 21:18:13

C++继承与多态之继承基本概念(继承后对象的基本内存布局、子类继承父类的内容、不同继承方式继承以后子类的访问权限)

1. 继承的本质(目的)简单来说就是为了代码的复用。通常情况下,B(派生类)是A(基类)的一种,那么A所包含的属性和行为B也会有,如果对于同一问题A、B解决的办法一致,那么B可以直接使用A的行为方式,不需要自己也实现,直接复用;如果A、B对于处理同一问题所使用的方式不同,那么B就需要重写从A继承下来的方法,因为对子类已经不适用。2. 理解代理、组合以及继承思想代理:被代理类的接口的功能子集。假设被代理类有10个借口,但是经过代理类包装,只向用户暴露5个接口,得到一个特定功能的类,比如STL中的容

2020-07-29 20:48:50

查看更多

勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。