转载文章-c/c++
文章平均质量分 79
zhh_kv
这个作者很懒,什么都没留下…
展开
-
内存碎片
“内存碎片”:指系统中所有不可用的空闲内存。后果:即使在系统中事实上仍然有许多空闲内存时,内存碎片还会最终导致出现内存用完的情况。空闲而不可用原因:空闲内存以小而不连续方式出现在不同的位置。 这些空闲内存之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用。空闲内存块多小才算是碎片是由内存分配器来决定的,因此内存分配器在保证空闲资源可用性方面扮演着重要的角色。 以下转载: malloc和free大量使用后回造成内存碎片,那么这种碎原创 2010-06-24 10:59:00 · 722 阅读 · 0 评论 -
stl::map( constructor,insert,iterator) 1
<br />what is map?<br />Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。<br />map内部数据的组织:map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的(这给程序带来好多好处)。<br /><br /> <br /> <br /> how to use map?<br /><br />构造函数:<br />转载 2010-08-11 22:13:00 · 822 阅读 · 0 评论 -
Temporary Objects
<br />Temporary Objects <br /> GOTW:#02 临时对象 <br /> Difficulty: 5 / 10 <br /> [难度系数]:5 / 10 <br /><br /> Unnecessary temporaries are frequent culprits that can throw all your hard work - and your prog转载 2010-09-02 14:28:00 · 694 阅读 · 0 评论 -
ofstream/ ifstream 详解
<br />ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;<br />在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:<br />1、插入器(<<)<br /> 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'/n';就表示把字符串"Write Stdout转载 2010-09-17 13:37:00 · 695 阅读 · 0 评论 -
谈谈C++继承中的重载,覆盖和隐藏
谈谈C++继承中的重载,覆盖和隐藏 写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),常常转载 2011-10-09 14:38:44 · 474 阅读 · 0 评论 -
c++ 面试题(转)
<br />C++部分:<br />1、一个类对象,有一个char成员,char*成员,int成员,两个成员函数,另外一个虚函数,问sizeof多少?<br />2、多继承使用成员函数时需要注意?避免虚函数调用二义性的方式列举2种。<br />3、如果new内存时,失败会出现何种情况?<br />4、delete时需要注意事项?delete数组时不用[]是否可以? 一个指针为NULL,可否进行delete?<br />5、构造函数和析构函数是否可以是虚函数?如果可以,说明何种情况下使用?转载 2010-06-30 13:10:00 · 346 阅读 · 0 评论 -
static_cast、dynamic_cast、reinterpret_cast、和const_cast
<br />static_cast、dynamic_cast、reinterpret_cast、和const_cast<br />关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast转载 2010-08-30 10:22:00 · 383 阅读 · 0 评论 -
左值 右值 (转)
什么情况下返回指针?什么情况下返回引用?指针和引用的效果一样么?<br />这里不仅涉及到引用的实现,也涉及到左值与右值的概念。因为返回值性质的不同决定了引用与指针必定不是相同的。相信你读过我写的这篇文章之后,会有一个比较清醒的认识。<br /> <br />左值(lvalue)和右值(rvalue)最先来源于C语言。最先在C语言中表示位于赋值运算符两侧的两个值,左边的就叫左值,右边的就叫右值。<br />比如:<br />int ii = 5; //ii是左值,5是右值<br />转载 2010-06-30 16:18:00 · 426 阅读 · 0 评论 -
<string> <string.h> <cstring> 的异同
是c++ 的头文件,其内包含了一个string类,string s1就是建立一个string类的对象 的c语言的东西 并无类,所以不能 string s1 文件实际上只是在一个命名空间std中include了 ~~~~~~~~~~~~~~~~······头文件string与string.h的区别 在C++中,#include与#include的区别,前者要转载 2011-12-30 11:42:43 · 863 阅读 · 0 评论 -
宽字符处理函数和窄字符处理函数对应表
字符分类: 宽字符函数普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符 iswdigit() isdigit() 测试字符是否为数字 iswgraph() isgraph() 测试字符是否是可见字符 is转载 2012-01-06 16:32:38 · 497 阅读 · 0 评论 -
回调函数
什么是回调函数? 普通的函数调用:通过函数名称调用函数; 回调函数的调用:通过函数指针调用函数。 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 为什么要使用回调函数原创 2011-09-08 13:00:16 · 488 阅读 · 0 评论 -
How Google Tests Software (reprint)
<br /> 导读:本文是从 How Google Tests Software - Part Three 这篇文章翻译而来。 本文作者 James Whittaker, 前微软架构师,是“How to Break Software”系列图书中好几部书的作者,现任Google测试工程主管,最近他写了一系列的关于谷歌如何测试软件的文章,本文为其系列的第三部分。以下是文章内容:<br />在Google,质量并不等于测试。我相信在任何一个地方都是如此。“质量不是被测试出来的”这句老话是再正确不过转载 2011-03-22 09:06:00 · 784 阅读 · 0 评论 -
堆区,栈区,new/delete/malloc/free(转载)
1.内存分配方式内存分配方式有三种:[1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存程序的整个运行期间都存在。例如全局变量,static变量。[2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。[3]从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动原创 2010-06-23 09:33:00 · 485 阅读 · 0 评论 -
内存分配函数
<br />1:malloc<br /> 函数原型:<br /> Void *calloc(size_t size) ,包含在库函数stdlib.h中;<br /> 作用:<br /> 是在内存的堆区分配一个大小为size的连续空间;<br /> 返回值:<br /> 内存成功,函数返回新分配内存的首地址,否则,返回NULL,<br /> 注意:鉴于上述这点,一般在写程序需要判断分配内原创 2010-06-23 09:12:00 · 396 阅读 · 0 评论 -
memset,memcpy,strcpy,memmove,memccpy
<br /> memset():<br /> 原型:extern void *memset(void *buffer, int c, int count);<br /> 用法:#i nclude<br /> 功能:把buffer所指内存区域的前count个字节设置成字符c。<br /> 说明:返回指向buffer的指针。<br /> 1:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘memset(a, '/0', sizeof(a));<br />原创 2010-06-23 09:46:00 · 660 阅读 · 0 评论 -
内存管理MEM
1:在不同的抽象层分配和释放内存导致双重释放潜在风险。2:野指针会导致多次释放内存或写入到已经释放的内存。避免与内存相关潜在风险的一种简单而且有效的方法是——在free()之后立即把指针设置为NULL,或指向另一个合法的对象。 注:1)如果一个非静态变量在free()之后立即离开了作用域,就不必清除它的值,因为它不再可访问。 2)野指针是说此指针指向不可用内存地址。 void foo(void) { char *str; /*.... */ free(str); re原创 2010-06-22 20:51:00 · 624 阅读 · 0 评论 -
结构件对齐(转)
<br />#include <iostream.h><br />void main()<br />{<br />struct struct1<br />{<br /> char p1;<br /> short p2;<br /> int p3;<br />};<br />struct struct2<br />{<br /> char p1;<br /> int p3;<br /> short p2;<br />};<br转载 2010-06-30 16:28:00 · 481 阅读 · 0 评论