05 2012 档案
摘要:语言的三要素:token(符号)、grammar(语法)、semantic(语义)按照语言的语法(grammar),将语言提供的token序列组合成语句(sentence),而语句的内在表现则是语义(semantic),而语义则是我们想通过这门语言表达的意思。举个实例:“Good bye.”,good、bye是英语语言的token,这句话符合英语的语法,“再见”是这句话的语义。
阅读全文
摘要:(废话:最近接触到内存对齐概念,针对内存对齐的规则,我在vc中一一进行了验证,发现编译器确实对我的数据进行了内存对齐。我便知道内存对齐必定是有它的优点所在,是什么呢?我找的资料都是说内存对齐可以提高内存访问效率、可移植到不同的平台等等,但是为什么会这样呢,没有一个清晰的解释。下面便是我多天努力的成果!)编译器为什么要替我们内存对齐?学了计算机组成原理,了解了内存的基本单元是一个字节,内存可以随机寻址,于是乎我天真的认为内存就是一个字节型的容器,基本单位是单个字节。Figure 1. 我眼中的内存空间布局悲剧的是,内存读写的真正访问者cpu不是这么想的。cpu是根据内存访问粒度(memory a
阅读全文
摘要:Design to interfaceFind the varies and encapsulate themFavor composition than inheritance
阅读全文
摘要:如果一个类没有任何constructor,那么会有一个default constructor被隐式的声明出来,一个implicit default constructor将是一个trivial(无用的)constructor。但是在某些情况下,implicit default constructor将是一个nontrivial constructor,下面一一讨论:由编译器合成nontrivial default constructor的四种情况:1)带有default constructor 的 member class object(ps:不包括基本数据类型对象):case 1:如果一个类
阅读全文
摘要:overload(重载),即函数重载:在同一个类中;函数名字相同;函数参数不同(类型不同、数量不同,两者满足其一即可);不以返回值类型不同作为函数重载的条件。override(覆盖),用于实现C++中多态:分别位于父类和子类中;子类改写父类中的virtual方法;与父类中的函数原型相同。overwrite(重写):与overload类似,但是范围不同,是子类改写父类;与override类似,但是父类中的方法不是虚函数。
阅读全文
摘要:key points:C++类中包含两种类型的数据成员:static、nonstaticC++类中包含三种类型的成员函数:static、nonstatic、virtualC++对象模型:nonstatic data members被配置于每一个类对象中,static data members被存放在个别的类对象之外。static和nonstatic function members也存放在个别的类对象之外,如果有virtual function members,会产生一堆指针分别指向每个virtual function member,这些指针存放在virtual funtion table中,
阅读全文
摘要:转载地址:http://www.cnblogs.com/alex-tech/archive/2011/03/24/1993856.html1:内存对齐定义: 现在使用的计算机中内存空间都是按照字节划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际上计算机系统对于基本数据类型在内存中的存放位置都有限制,要求这些数据存储首地址是某个数K的倍数,这样各种基本数据类型在内存冲就是按照一定的规则排列的,而不是一个紧挨着一个排放,这就是内存对齐。对齐模数: 内存对齐中指定的对齐数值K成为对齐模数(Alignment Modulus)。当一种类型S的对齐模数与另一种类型T的对齐模数的比
阅读全文
摘要:参考博客:http://www.cppblog.com/colorful/archive/2012/05/17/175182.html在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian,下面Endian这个词的来源说起。一、Endian词源据Jargon File记载,endian这个词来
阅读全文
摘要:.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。.h .lib .dll三者的关系是:H文件作用是:声明函数接口DLL文件作用是: 函数可执行代码当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用: 告诉链接器 调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,这也就是为什么需要附加依赖项 .LIB
阅读全文
摘要:转载地址:http://computer.eefocus.com/lingyue/blog/09-03/167608_03695.html许多初学者都会对这三个概念区分不清,应该说这三个概念是完全不同的,不能混为一谈。在本文中,我就尽我最大的能力来讲讲这三个概念以及他们之间的关系。首先说程序设计语言,它同人类的自然语言一样也是一个语言,并且它是自然语言的一个子集。大家都知道自然语言是极其庞大和复杂的系统,具有很多不不确定性和不精确性,因此至今我们也没有办法对自然语言进行形式化的描述。程序设计语言只是自然语言的一个很小的子集,在计算机系统中,一切都是需要确定性和精确性的描述,因此程序设计语言也是
阅读全文
摘要:参考文章:http://www.cppblog.com/Macaulish/archive/2008/06/17/53689.html跪求指出错误!Why need it?extern "C"的根本目的是为了实现C和C++的混合编程。The principle根本原因在于C++和C中的函数的编译方式不同。如函数void foo(int n);被C编译器编译后在符号表中的名字形如:_foo被C++编译器编译后在符号表中的名字形如:_foo_intC++中为什么要采用这种编译方式呢?因为C++中支持函数重载,而C不支持函数重载,再回想一下函数重载的要求:函数名相同,函数参数类型
阅读全文
摘要:获取当前系统信息:void WINAPI GetSystemInfo(_out LPSYSTEM_INFO lpSystemInfo)实例代码:#include <Windows.h>
#include <iostream>
using namespace std; void main()
{ SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); cout<<"Page Size: "<<sysInfo.dwPageSize<<'\n' <<
阅读全文
摘要:利用位图对数据进行排序。前提:待排数据不能有重复,且要能估计出待排数据值的上界(越精确效率越高)时间复杂度:设待排数据值上界为M,待排数据量为N,则时间复杂度为O(2M+N)c++实现代码:#ifndef BITMAP_SORT_H
#define BITMAP_SORT_H //sort the array by bitmap, it demand all elements of src can't be repeated.
const int WORD = 32;
const int SHIFT = 5; //left shift 5 bits equal to mutiply 3
阅读全文

浙公网安备 33010602011771号