摘要:
作者:bakari 时间:2012.4.211、操作数类型Imm立即操作数Reg寄存器操作数Mem内存操作数2、操作数寻址方式立即数寻址寄存器数寻址存储器寻址3、数据传送类指令(重点介绍)mov、xchg、push、pop、lea(除标志寄存器指令外,其余均不影响标志位)1.1、通用数据传送指令1)、Mov传送指令两个操作数的尺寸必须是一致的(但movzx和movsx例外)两个操作数不能同时为内存操作数(内存数据不能直接传送)指令规则目的操作数不能为CS、EIP和IP(会覆盖原来其指向的数)立即数不能直接送段寄存器(不允许:mov DS,Data)两个段寄存器之间不能直接传送数据(其余指令与此 阅读全文
摘要:
int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。栈是一种先进后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为栈顶)。用户可以在栈顶上方向栈中加入数据,这 阅读全文
摘要:
谈谈重载(overload)覆盖(override)与隐藏转自http://blog.csdn.net/yanjun_1982/archive/2005/09/02/470405.aspx这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。隐藏是指派生类中的函数把基类中相同名 阅读全文
摘要:
作者:bakari 时间:2012.6.51、指向const对象的指针---const int *cptr;i、在此,cptr是指向int类型的const对象的指针,cptr并非是const,可以指向其他具有const特性的对象。 *cptr的对象不可以改变。 e.g: *cptr = 43;//ERROR!ii、不能将非const对象的地址赋给指向const对象的指针。反之可以,下面在谈。 记住这句话,具有限制的东西永远有最高的权限。iii、不能使用void*保存const对象的地址,而必须使用const void*。 const int x = 34; void *pv = &x; 阅读全文
摘要:
说明:这篇文章主要通过查阅网上资料整理而成,并非原创。顺序容器三种容器均支持resieze()操作,重新划定容器大小,且此函数有重载。 vector vector和built-in数组类似,是一个在堆上建立的一维数组,它拥有一段连续的内存空间,并且起始地址不变,因此 它能非常好的支持随即存取,即[]操作符。vector因为存储在堆上,所以支持erase( ), resieze()(重新划分容器容量)等操作; vector不用担心越界当空间不够用的时候,系统会自动按照一定的比例(对capacity( )大小)进行扩充。在vector序列末尾添加(push_back( ))或者删除(pop_bac 阅读全文
摘要:
引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是 阅读全文
摘要:
我们先来看内存中的几大区: 内存到底分几个区?下面有几种网上的理解,我整理一下:一:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由os回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放。4、文字常量区 —常量字符串就是放在.. 阅读全文