- 博客(8)
- 收藏
- 关注
原创 计算机开机第一条指令地址
前提本文针对x86架构的处理器。在正式开始之前,首先需要明确一些基本概念。 cs寄存器:代码段寄存器,这个寄存器其实是告诉CPU在这个位置是代码还是数据的。在实模式下,CPU的寻址方式是代码段寄存器左移4位然后加上ip寄存器,作为地址去取内容,写作cs:ip。 reset vector:就是CPU执行的第一条指令的位置地址构成其实随着x86的发展,第一条指令的地址并不是一成不变的 8086:C
2016-12-08 11:12:55 6542 1
原创 系统调用过程的控制流转移
用户态与内核态用户态、内核态其实是CPU运行权限的概念,我们知道处理器指令分为两类,特权指令和非特权指令,用户是不能直接使用特权指令的,不然用户可以随意调度敏感资源,整个系统就混乱了。x86 CPU的权限有四个层级,分别是Ring0~Ring3.其中Ring0的级别最高,可以使用所有指令(内核运行在Ring0上),而用户代码运行在Ring3上,只能使用非特权指令。如何确定CPU能否执行特权指令呢,这
2016-11-02 15:44:43 973
原创 C++类的访问控制
前言C++类中关于访问说明符的关键字是public,protected和private,由于C++的继承的访问说明符不同,这里会牵扯出非常多不同的情况,本文尝试对此进行整理无继承public,protected和private这三个访问说明符其实是针对使用该类的代码而言的,如下class Test {public: int a;protected: int b;private:
2016-09-14 16:00:14 2634
原创 C++类中的内存对齐
对齐规则在没有#pragma pack宏的情况下: 1.数据成员对齐规则:struct, union的数据成员,第一个数据成员放在offset为0的地方,之后的数据成员的存储起始位置都是放在该数据成员大小的整数倍位置。如在32bit的机器上,int的大小为4,因此int存储的位置都是4的整数倍的位置开始存储。 2.结构体作为数据成员的对齐规则:在一个struct中包含另一个struct,内部st
2016-09-13 14:47:15 1969 1
原创 常用排序算法
排序在程序中非常常见,许多时候人们过于关注各种高级算法,在长久的工作学习中甚至只会调用库函数排序。闲来无事,整理了几种自己认为最常见的排序算法,仅为温习和备忘。插入排序,shell排序,选择排序,堆排序,快速排序,归并排序,冒泡排序
2015-10-07 19:51:05 324
原创 python字典结构get()方法的陷阱
字典是python中常用的数据结构,get()方法可用来判断字典中是否存在对应的key,但是当该key的对应value为0时,使用该方法来判断key是否存在容易出错。 get()方法使用如下:mydict.get(1)#假如字典中存在key为1的键值对,那么返回1对应的value值,如果不存在则返回Nonemydict.get(1, -1)#假如字典中存在key为1的键值对,那么返回1对应的
2015-10-06 16:03:32 3456 1
原创 VirtualBox 设置共享文件夹
实验环境1、local OS:OS X 10.10.1 2、guest OS:ubuntu server 14.04.3 LTS 安装 VirtualBox Guest Additions要支持共享文件夹,需要在guest os内安装virtualbox guest additions。安装过程如下: 1、安装dkms(dynamic kernel modules supports)apt-ge
2015-09-29 10:32:45 456
原创 KMP算法
KMP算法是一个模式匹配算法(模式串匹配目标串),是由Knuth,Morris,Pratt共同提出的,其特点就是可以在线性时间内完成。它利用一个跳转表,在每次匹配错误的情况下目标串都不用回溯。构造这个跳转表(next数组)就是KMP算法的核心所在。
2015-09-06 15:13:59 317
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人