
C和C++
颖豆豆啦
这个作者很懒,什么都没留下…
展开
-
vector扩容
vector向量容器相当于一个动态的数组,当向向量容器中不断加入元素,若超过容器本身的大小限制,vector会自动拓展大小,在这过程中涉及到内存的分配和回收。在veector中有size()和capacity()函数。size()函数是指返回当前容器中的元素个数,对应的resize(size_type)会在容器尾添加或删除一些元素,来调整容器中实际的内容,使容器达到指定的大小。capacity()指原创 2017-10-19 22:29:21 · 894 阅读 · 0 评论 -
private和protected的区别
首先这两个都是访问类中成员权限的限制符。 private是完全私有的,只有自己可以访问,派生类和外部都不可以访问 protected是受保护的,只有派生类可以访问,外部不能访问 在类外如果想使用类中的成员,只能直接使用public类型的,proteced和private都是不能访问的,对于类外而言,这两个是完全相同的。不能把私有数据的地址或引用泄露出去,外部可以改变私有数据的值。...原创 2018-08-08 13:23:20 · 37036 阅读 · 2 评论 -
野指针
野指针 eg:char* p = (char*)malloc(100); free(p); free掉之后p只是切断了和内存空间的关系,p指针本身内部所指的地址仍然不变,但是它对这个地址处的那一块内存却已经没有所有权了。如果不把它置为空,那这个指针就会变成一个野指针(悬垂指针)。 所谓的野指针就是指向一个已经被删除的对象或未申请访问内存受限的区域的指针。与空指针不同的是,野指针无法通过判断...原创 2018-08-08 13:22:18 · 227 阅读 · 0 评论 -
内存泄漏
什么叫内存泄漏? 内存泄漏一般是指堆内存的泄漏,动态的从堆上申请一块任意大小的内存,使用完没有显式释放内存,导致这块内存不能被再次使用。 有哪些内存泄漏? 1、浅拷贝。对于有指针对象的类,必须有显示的拷贝构造函数。 2、基类指针指向堆上的派生类对象。当通过delete想释放派生类对象的内存时,会导致派生类对象的析构函数无法调用,只调用了基类部分的析构函数,如果此时派生类的析构函数有释放额外...原创 2018-08-08 13:21:52 · 235 阅读 · 0 评论 -
static关键字
1、定义变量 静态全局变量和普通全局变量的区别: (1)作用域:头文件下的所有函数都可以用,两者相同 (2)生命周期:程序运行开始创建,程序结束才销毁,两者相同 (3)默认值:0,两者相同 (4)内存区域:全局(静态)变量区,两者相同 (5)唯一不同的就是链接属性,外部是否可链接。静态全局变量只能被文件内部的函数引用,普通全局变量可被多个文件引用。静态关键字其实也就是修饰链接属性,让其...原创 2018-08-08 13:20:29 · 128 阅读 · 0 评论 -
结构体位域/段
应用场景:有些信息在存储的时候,并不需要占用一个完整的字节,只需要占几个或一个二进制位。(比如开关变量,只有0和1两种状态,用一位二进制位即可)。 为了节省存储空间,C语言提供了一种数据结构,称为“位域”或“位段”。所谓“位域”就是把一个字节中的二进制位划分成几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作,这样就可以把几个不同的对象用一个字节的二进制位域来表示...原创 2018-08-08 13:19:43 · 207 阅读 · 0 评论 -
类的const成员方法
const成员函数主要目的是防止成员函数修改对象的内容。即const成员函数不能修改成员变量的值,但可以访问成员变量。1、const成员方法在函数参数列表后加入const,只能由常对象调用,常对象不能调用普通成员方法。 2、调用的时候必须依赖一个对象 3、能访问私有和保护的成员 4、类的作用域在C++中,由const修饰的成员函数的函数体内部,是不能对成员变量进行修改的。这个特性用来...原创 2018-08-15 08:59:10 · 2018 阅读 · 0 评论 -
删除字符串中的空格
1、删除字符串中所有的空格char *DelBlankFromStr(char *str){ if(str != NULL) { char *p = str; int i = 0; while(*p != ' ') {++p;}//删除前面的空格 while(*p!='\0') {原创 2017-10-26 21:12:25 · 3914 阅读 · 0 评论 -
STL空间配置器
一、为什么要产生空间配置器 在软件开发,程序设计中,我们不免因为程序需求,使用很多的小块内存(基本类型以及小内存的自定义类型)容易出现以下问题: 1、出现内存碎片问题(外部碎片) 2、一直在因为小块内存而进行内存申请,调用malloc,系统调用产生性能问题。考虑到小型区块所可能造成的内存破碎问题,就有了双层级配置器。 二、空间配置器1、调用:当配置区是否超过128bytes? yes:调用原创 2017-10-16 20:49:40 · 193 阅读 · 0 评论 -
STL六大组件
一、什么是STL 1、STL(Standard Template Library),即标准模板库,是一个高效的C++程序库。 2、包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性3、从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)在这种思想里,大部分基本算法被抽象,被泛原创 2017-10-16 15:23:38 · 332 阅读 · 0 评论 -
内存池的实现
引言C/C++下内存管理是让几乎每一个程序员头疼的问题,分配足够的内存、追踪内存的分配、在不需要的时候释放内存——这个任务相当复杂。而直接使用系统调用malloc/free、new/delete进行内存分配和释放,有以下弊端: 1.调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,调用free/delete,系统可能需要合并空闲内存块,这些转载 2017-10-15 19:26:07 · 350 阅读 · 0 评论 -
map中[]运算符和find的区别
map的下标运算符[]的作用是:将关键码作为下标去执行查找,并返回对应的值;如果不存在这个关键码,就将一个具有该关键码和值类型的默认值的项插入这个map。map<string,string> m;m["first"] = "hello";m["second"] = "world";cout<<"[]查找之前"<<endl;map<string,string>::iterator it = m.原创 2017-10-22 23:24:13 · 13300 阅读 · 0 评论 -
ELF文件的链接视图(obj)和执行视图(exe)
先来说一下obj文件和exe文件的组成格式吧。 obj文件组成格式ELF Header一共52个字节,用16进制表示0X34。通过readelf -h main.o命令可以查看文件头(-s 可以查看所有的段)。可以发现文件的开始先是ELF Header文件头,它包含了整个文件的基本属性(ELF文件版本、目标机器型号、程序入口等)。接着就是.text段,放的...原创 2018-08-08 13:31:24 · 4271 阅读 · 0 评论