随笔分类 -  c/c++

摘要:共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。共有两种链接方式:动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息。静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。关于lib和dll的区别如下:(1)lib是编译时用到的,dll 阅读全文
posted @ 2014-01-29 11:14 ☆A希亿 阅读(1070) 评论(0) 推荐(0) 编辑
摘要:脏矩形技术学习 很久以来由于工作上的繁忙没有写新东西了~hoho~ 本文基于2D表现的游戏,在当今3D大行其道的时代,说2D是否显得格格不入?这个问题我不作讨论,因为本人从事的一直都是2D游戏的开发,所以如果你认为讨论2D技术是一个过时的东西就此打住。 废话不多说,下面进入正题。 优化一直是我在程序中追求的东西之一,想想让自己的游戏在一个古董机器能流畅的运行或者说在当今的机器上,CPU占用率和内存占用率都很低的情况。(毕竟我非常讨厌一个游戏独占了我所有的CPU资源)。 如果从图形接口上作优化,常用的就是使用3D加速和CPU的特殊指令(虽然说DirectDraw能够使用2D硬件加速,但大部分机器 阅读全文
posted @ 2013-02-01 18:40 ☆A希亿 阅读(739) 评论(0) 推荐(0) 编辑
摘要:C++类所占内存大小计算转载时请注明出处和作者联系方式文章出处:http://blog.csdn.net/chenchong08作者联系方式:vision_chen@yeah.net说明:笔者的操作系统是32位的。class A {}; sizeof( A ) = ?sizeof( A ) = 1明明是空类,为什么编译器说它是1呢?空类同样可以实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以sizeof( A )的大小为1.class B {public: B() {} ~B() {} 阅读全文
posted @ 2012-11-19 04:42 ☆A希亿 阅读(988) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/haoel/article/details/1948051/作者:陈皓一篇很好的讲解虚函数表的文章目录(?)[-]前言虚函数表一般继承(无虚函数覆盖)一般继承(有虚函数覆盖)多重继承(无虚函数覆盖)多重继承(有虚函数覆盖)安全性结束语附录一:VC中查看虚函数表附录 二:例程C++ 虚函数表解析陈皓http://blog.csdn.net/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技 阅读全文
posted @ 2012-09-14 17:53 ☆A希亿 阅读(197) 评论(0) 推荐(0) 编辑
摘要:placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator new( size_t, void *p ) throw() { return p; }首先我们区分下几个容易混淆的关键词:new、operator new、placement new new和delete操作符我们应该都用过,它们是对堆中的内存进行申请和释放,而这两个都是不能被重载的。要实现不同的内存分配行为,需要重载operator new,而不 阅读全文
posted @ 2012-06-16 13:14 ☆A希亿 阅读(184) 评论(0) 推荐(0) 编辑
摘要:在Win32平台上进行多线程编程,常会用到锁。下边用C++实现了互斥对象(Mutex)锁和临界区(CRITICAL_SECTION)锁,以加深理解和今后方便使用。代码已在VS2005环境下编译测试通过。Lock.h[cpp] view plaincopyprint?#ifndef_Lock_H #define_Lock_H #include<windows.h> //锁接口类 classILock{public:virtual~ILock(){}virtualvoidLock()const=0;virtualvoidUnlock()const=0;};//互斥对象锁类 classM 阅读全文
posted @ 2012-06-14 16:11 ☆A希亿 阅读(594) 评论(0) 推荐(0) 编辑
摘要:头文件 #include 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。 返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。 返回0表示失败 否则,表示正确格式化数据的个数 例如:sscanf(str,"%d%d%s", &i,&i2, &s); 如果三个变成都读入成功会返回3。 如果只读入了第 阅读全文
posted @ 2012-06-13 18:35 ☆A希亿 阅读(565) 评论(0) 推荐(0) 编辑
摘要:某日一朋友写了一个HELLO WORLD代码,出不来结果,代码如下:#include <stdio.h> int main(int argc, char **argv){ printf("hello world!"); _Exit(0); } 注意到,在代码中printf语句打印的字符串最后没有带换行符,而且最后调用了_Exit函数,这导致了在终端屏幕上显示不出来字符串"hello world!"。 首先介绍一下UNIX里面关于标准IO的几种缓冲机制: 1、全缓冲 。全缓冲指的是系统在填满标准IO缓冲区之后才进行实际的IO操作;注意,对于驻留 阅读全文
posted @ 2012-06-13 13:53 ☆A希亿 阅读(5559) 评论(0) 推荐(0) 编辑
摘要:首先简单介绍一下堆和栈的区别.1.内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1)、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2)、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3)、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后系统释放。4)、文字常量区—常量字符串就是放在这里的,程序结 阅读全文
posted @ 2012-04-16 15:27 ☆A希亿 阅读(569) 评论(0) 推荐(0) 编辑
摘要:static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static全局变量、局部变量、静态全局变量、静态局部变量的区别 C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看: 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 静态局部变量具 阅读全文
posted @ 2012-04-16 15:25 ☆A希亿 阅读(672) 评论(0) 推荐(0) 编辑
摘要:C++ QueuesThe C++ Queue is a container adapter that gives the programmer a FIFO (first-in, first-out) data structure.Display all entries for C++ Queues on one page, or view entries individually:Queue constructorconstruct a new queuebackreturns a reference to last element of a queueemptytrue if the q 阅读全文
posted @ 2012-04-12 12:40 ☆A希亿 阅读(267) 评论(0) 推荐(0) 编辑
摘要:set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素 阅读全文
posted @ 2012-04-10 21:54 ☆A希亿 阅读(50489) 评论(0) 推荐(1) 编辑
摘要:一、动态链接库的概念 动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。 动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时... 阅读全文
posted @ 2012-04-08 22:42 ☆A希亿 阅读(1811) 评论(0) 推荐(0) 编辑
摘要:c++模版:包含模型、显式实例化、分离模型大多数c和c++程序员会这样的组织他们的非模板代码:类和其他类型放在头文件中,对于全局变量和(非内联)函数,只有声明放在头文件中,定义则位于.cpp文件中,这样我们的代买就可以工作了,然而在模板代码中,这一切在有的编译器中并不可行。原因就是:在我们编译过程中,大多数编译器会通过,但是链接器却会出问题:因需要用到的模板函数的定义还没有被实例化。为了实例化,编译器必须知道,应该实例化模板的哪个定义以及要基于哪个模板实参进行实例化。遗憾的是,我们的非模板代码组织方式,把这两部分信息放到了分开编译的两个文件中。因此,当编译器看到我们的函数调用的时候,只是假设函 阅读全文
posted @ 2012-03-21 21:31 ☆A希亿 阅读(407) 评论(0) 推荐(0) 编辑
摘要:STL中map用法详解Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的学号跟他的姓名就存在着一一映射的关系,这个模型用map可能轻易描述,很明显学号用int描述,姓名用字符串描 阅读全文
posted @ 2012-03-20 16:11 ☆A希亿 阅读(327) 评论(0) 推荐(0) 编辑
摘要:(转)详细解说hash_map几句话道出map和hash_map的区别1. STL map is an associative array where keys are stored in sorted order using balanced trees. While hash_map is a hashed associated container, where keys are not stored in an ordered way. Key, value pair is stored using a hashed function. 2. Insertion and lookup t 阅读全文
posted @ 2012-03-20 15:40 ☆A希亿 阅读(309) 评论(0) 推荐(0) 编辑
摘要:C++内存管理转自:http://www.cnblogs.com/lancidie/archive/2011/08/05/2128318.html[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏 阅读全文
posted @ 2012-03-18 22:27 ☆A希亿 阅读(541) 评论(0) 推荐(0) 编辑
摘要:Vector内部数据结构:连续存储,例如数组。随机访问每个元素,所需要的时间为常量。在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。可动态增加或减少元素,内存管理自动完成,但程序员可以使用reserve()成员函数来管理内存。迭代器失效插入:vector的迭代器在内存重新分配时将失效(它所指向的元素在该操作的前后不再相同)。当把超过capacity()-size()个元素插入vector中时,内存会重新分配,所有的迭代器都将失效;删除:当进行删除操作(erase,pop_back)后,指向删除点及其后元素的迭代器全部失效。建议:使用vecto 阅读全文
posted @ 2012-03-17 00:01 ☆A希亿 阅读(790) 评论(0) 推荐(0) 编辑
摘要:转自:http://www.cnblogs.com/lichkingct/archive/2009/05/04/1449101.html一. 种类:标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。几种标准非STL容器,包括数组、bitset、valarray、stack、queue和priority_que 阅读全文
posted @ 2012-03-16 23:58 ☆A希亿 阅读(496) 评论(0) 推荐(0) 编辑
摘要:转自:http://www.cnblogs.com/ComputerG/archive/2012/02/02/2335611.html(一)基本概念 sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 (二)使用方法1、用于数据类型 sizeof使用形式:sizeof(type) ,如sizeof(int)2、用于变量 sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形. 阅读全文
posted @ 2012-02-15 22:38 ☆A希亿 阅读(1493) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示