2011年10月4日

硬盘主引导记录(MBR)+ 硬盘分区表(DPT) 详解

摘要: 硬盘主引导记录(MBR)+ 硬盘分区表(DPT) 详解 硬盘主引导扇区 = 硬盘主引导记录(MBR) + 硬盘分区表(DPT),位于0柱面(cylinder)0磁头(head | side)1扇区(sector),大小512字节,其中MBR 446字节, DPT 64字节(记录4个主分区的信息), 结束标志2字节(0x55aa)功能: MBR通过检查DPT分区信息引导系统跳转至DBR活动分区主引导... 阅读全文

posted @ 2011-10-04 00:50 Observer 阅读(1533) 评论(0) 推荐(0) 编辑

2011年10月3日

学习 Linux,101:硬盘布局

摘要: 该部分是:101 中主题 102 下的目标 102.1 文件系统:文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)。向用户提供一种访问底部数据的方式,使用户不依赖于特定的储存设备。文件名、元数据(metadata)、安全访问 Windows在不同的盘符上使用不同的文件系统Linux使用挂载点挂载设备上的文件系统磁头(head):硬... 阅读全文

posted @ 2011-10-03 16:04 Observer 阅读(309) 评论(0) 推荐(0) 编辑

2011年9月3日

取得类成员的偏移量

摘要: 提出问题给定一个类:struct A{ int a0; int a1; int a3;};如何取得各成员相对于类地址的偏移量?解决问题一种方法如下:#define MEMOFFSET1(Class, Member) (reinterpret_cast<char*>(&static_cast<Class*>(0)->Member) - reinterpret_cast<char*>(0))首先强制类型转换成为char*指针,保证计数是以字节为单位,然后指针做减法,得到整形,由于是用空指针做类型转换,因此后面的减数指针的值为0另一个等效的方式是:# 阅读全文

posted @ 2011-09-03 17:12 Observer 阅读(698) 评论(0) 推荐(0) 编辑

2011年8月31日

右值引用的一些研究

摘要: 以下的内容是最新的c++0x标准当中的,其中vs2010是符合这个标准的TypeName&&表示右值引用类型: 为了判断一个表达式是左值还是右值,第一个想法是写函数来判断,函数不能模板特化,因此通过重载来确定是不错的方法: 第一个函数接受非const左值: template<class T>void GetValType(T&){ cout << "Not a Right Value, a T" ... 阅读全文

posted @ 2011-08-31 18:34 Observer 阅读(339) 评论(0) 推荐(0) 编辑

2011年8月30日

c++强制类型转换的一些研究

摘要: c++相对于c在强制类型转换上的区别还是很大的,除了引入了c中不可能有的dynamic_cast外还将原c中的强制类型转换:(Type_name)expr分拆变成几个不相交的强制类型转换:static_cast,const_cast,reinterpret_cast首先从由简单到复杂分别解释这三个不相交的强制类型转换在指针和引用上的表现:const_cast<T*>(expr) 或 const_cast<T&>(expr)(以后就只写指针的形式,毕竟指针和引用在编译后的代码上没有区别):如其名所示是随意改变某个表达式的const性和volatile的,其他的功能 阅读全文

posted @ 2011-08-30 18:57 Observer 阅读(872) 评论(0) 推荐(0) 编辑

2011年5月26日

正则表达式,向前零宽断言(向前查找)

摘要: 向前查找的意思是向后文查找(前面的路就是未知的路) 最简单的情形是如下情形: 搜索文本abcdefg中的abc: abc(?=defg) 意思很明确:就是说要找到abc并且后面的那个位置应该是在defg之前。 其实用下面的方式也是可以匹配得到的: (?=abcdefg)abc 这个表达式经过仔细研究后发现是以下的意思: 首先找到一个位置,这个位置是abcdefg这个模式之前,然后在这个位置上找到a... 阅读全文

posted @ 2011-05-26 22:34 Observer 阅读(2631) 评论(0) 推荐(1) 编辑

2011年3月22日

Typelists(三)

摘要: 类型排序准则(将最深派生放在最前方)Typelists3.h #include "../型别选择/select.h"//for template<class If, class Then, class Else> struct Select;#include "../编译期间侦测可转换性和继承性/Conversion.h"//for #define DERIVE_BASE_CLASS#include "Typelists2.h"//从Tlist中找到T的最深派生类template<class TList, class 阅读全文

posted @ 2011-03-22 20:01 Observer 阅读(208) 评论(0) 推荐(0) 编辑

Typelists(二)

摘要: 定义部分 Typelists2.h #include "Typelists.h"//类型链表的连接/*****两者都是类型(非TypePair),实际上就是TypePair的构造器:*****/template<class T, class U>struct Connect{ typedef Typelists_2(T, U) Result;};template<class T>struct Co... 阅读全文

posted @ 2011-03-22 13:44 Observer 阅读(239) 评论(0) 推荐(0) 编辑

2011年3月18日

Typelists(一)

摘要: 实现部分 Typelists.h //想想看一个std::pair变量能够拥有无数的变量//如果元素不是变量而是类型,会是什么景象呢?template<class T, class U>struct TypePair{ typedef T First; typedef U Second;};//如同c字符串,使用一个人为定义的空类来作为结束struct NullType;//方便使用,定义出不同数... 阅读全文

posted @ 2011-03-18 21:48 Observer 阅读(309) 评论(0) 推荐(0) 编辑

编译期间侦测可转换性和继承性

摘要: 如何发现类型A可以隐式转换成为类型B,归根结底都落在了函数形参的匹配上,无论是明白的函数调用或是operator =的使用。如果一个接受类型B的函数可以接受A,那就说明了问题。如何知道两者调用了相同的函数(运行期)或者说如何知道两者决定调用相同的函数(编译期)。在运行期检查的方式简直多如牛毛,但是如何在编译期就检查出来呢?这还不容易,就仅仅定义一个这个函数,如果可以转化就通过编译,如果不能转化就报... 阅读全文

posted @ 2011-03-18 14:06 Observer 阅读(325) 评论(0) 推荐(0) 编辑

导航