C/C++
文章平均质量分 73
HQ_Hanks
这个作者很懒,什么都没留下…
展开
-
C++内存对齐详解
转载地址:http://www.cppblog.com/cc/archive/2006/08/01/10765.html内存对齐 在我们的程序中,数据结构还有变量等等都需要占有内存,在很多系统中,它都要求内存分配的时候要对齐,这样做的好处就是可以提高访问内存的速度。内存对齐是操作系统为了快速访问内存而采取的一种策略,简单来说,就是为了放置变量的二次访问。操作系统在访问内存转载 2014-03-27 10:07:38 · 595 阅读 · 0 评论 -
《Accelerate C++》读书笔记(二)
13、关联容器提供了高效的方法来让我们查找一个包含特定值而且有可能同时包含了附加信息的元素。14、一个数对(pair)是一个简单的数据结构,它保存了两个分别叫做first和second的元素。映射表中每一个元素都是一个数对,若间接引用一个映射表的迭代器,获得的即为何这个映射表关联的一个pair类型值。pair(const key, value),一般键值为常量,不允许随意改变。15、关联容原创 2014-11-08 20:05:57 · 758 阅读 · 0 评论 -
程序运行时的内存空间分布
向原作者致敬:http://blog.csdn.net/ljianhui/article/details/21666327我们在写程序时,既有程序的逻辑代码,也有在程序中定义的变量等数据,那么当我们的程序进行时,我们的代码和数据究竟是存放在哪里的呢?下面就来总结一下。一、程序运行时的内存空间情况其实在程序运行时,由于内存的管理方式是以页为单位的,而且程序使用的地转载 2015-04-01 09:43:59 · 544 阅读 · 0 评论 -
类的静态数据成员和静态成员函数浅析
一、静态数据成员 类中的数据成员声明前加上static,则表示该数据成员为静态数据成员。除了与其他数据具有相同的public/private/protect访问属性外,还有一些其他的属性: 1、不能在类中进行初始化,只能在类外。 因为静态数据成员为所有类对象公有(包括派生类),不占用类对象的存储空间。若在类中初始化,容易造成对其他对象中该数原创 2015-04-28 10:23:20 · 1817 阅读 · 0 评论 -
《Accelerate C++》读书笔记(四)
1、 main()函数有两个参数:一个整型参数,通常的表示为:int argc;一个指向字符串指针的指针参数,通常表示为:char ** argv; 示例如下:2、 在定义ofstream/ifstream类型对象的时候需要提供一个文件名,要求提供的是一个指向以空字符结尾的字符数组的首元素的指针。3、 赋值和初始化的区别:赋值总是删除一个原创 2015-04-28 20:02:15 · 784 阅读 · 0 评论 -
C++模板及模板特化
原文地址:http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html 向原作者致敬!1. 模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载转载 2015-05-04 15:36:29 · 1093 阅读 · 0 评论 -
可变参数列表及printf函数的实现
原文:http://blog.chinaunix.net/uid-23215128-id-2521483.html一直没有搞懂printf函数是怎么实现的,今天又看了一下可变参数列表的函数的编写,大概的了解了一点。反推出原来没想到的一个东西,那就是函数形参列表中的变量在内存中的位置是顺次排列的。头文件Stdarg.h里的几个宏定义就是利用了这么一点,顺次获取多个参数,感觉还是挺笨的一个转载 2015-06-10 19:55:18 · 535 阅读 · 0 评论 -
C++中智能指针的设计和使用(转)
转载地址:http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联转载 2015-07-09 21:16:03 · 402 阅读 · 0 评论 -
《深入理解C++对象模型》读书笔记(一)
1、 C++类对象模型的中包括非静态成员变量和虚函数表指针,其他静态成员变量和成员函数均放在对象模型之外,所有的对象示例均可以共同使用。如此可以节省访问的时间和空间效率。 2、 虚继承是为了解决多重继承中出现公共的基类出现二义性。 class A; classB1:public virtual A; classB原创 2015-07-31 10:49:21 · 3315 阅读 · 0 评论 -
《深入理解C++对象模型》读书笔记(二)
1、 静态成员函数特点:1、不能够直接存取非静态成员变量(因为静态成员函数不含有this指针);2、不能够声明为const、volatile或virtual;3、不需要通过类对象调用。直接通过类名调用;4、地址类型就是普通的函数指针,其他非静态成员函数的地址需要用类成员函数指针来存储。class base{ static int func1(); int func2()原创 2015-08-07 15:12:26 · 1487 阅读 · 0 评论 -
设计一个只能在堆上或栈上实例化的类
原文地址:http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621827.html 向原作者致敬!一道C++笔试题:设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类只能在堆内存上实例化的类:将析构函数定义为private,在栈上不能自动调用析构函数,只能手动调用。也可以将构造函数定义为private,但这样需转载 2015-07-19 11:25:08 · 447 阅读 · 0 评论 -
Placement new和operator new解释
原文地址: http://www.cnblogs.com/younes/archive/2010/04/26/1721528.html 向原作者致敬!Placement new、operator new、new operator 完全释疑首先我们区分下几个容易混淆的关键词: new(也称作new operator)、operator new、placement ne转载 2015-08-06 14:43:45 · 656 阅读 · 0 评论 -
explicit关键词用法
转载原文地址:http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html向原作者致敬!按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用转载 2015-09-12 10:51:22 · 460 阅读 · 0 评论 -
《Accelerate C++》读书笔记(三)
20、模板函数可以使不同类型的对象享有共同的行为特性。程序只在编译期间才判断出具体的参数类型,并将其实例化。21、迭代器可以满足对容器不同的访问需求,STL总共定义了五种迭代器类型:顺序只读、顺序只写、顺序读写(正向迭代器)、可逆访问(双向迭代器)、随机访问。22、容器中使用不对称的开闭区间组合,即end指向区间最后一个元素的后面的位置,如此做有以下几个优点:A:若区间为空区间,则可以很方原创 2015-03-29 22:19:32 · 786 阅读 · 0 评论 -
new和malloc的区别与联系
参考博客地址:http://blog.sina.com.cn/s/blog_6371284401012pqf.html http://www.cnblogs.com/fly1988happy/archive/2012/04/26/2470542.html http://www.cnb转载 2015-03-26 20:29:02 · 3370 阅读 · 0 评论 -
关于“using namespace std”
对于一个存在着标准输入输出的C++控制台程序,一般会在#include 的下一行发现一句话,using namespace std。这句话其实就表示了所有的标准库函数都在标准命名空间std中进行了定义。其作用就在于避免发生重命名的问题。 1. 关于namespace C++引入了命名空间namespace主要解决了多个程序员在编写同一个项目中可能出现的函数等重名的现象。解决方法转载 2014-10-18 11:50:00 · 616 阅读 · 0 评论 -
c++中的 trivial destructor
如果用户不定义析构函数,而是用系统自带的,则说明,析构函数基本没有什么用(但默认会被调用)我们称之为trivial destructor。反之,如果特定定义了析构函数,则说明需要在释放空间之前做一些事情,则这个析构函数称为non-trivial destructor。如果某个类中只有基本类型的话是没有必要调用析构函数的,delelte p的时候基本不会产生析构代码,在C++的类中如果只转载 2014-07-24 11:13:45 · 10384 阅读 · 0 评论 -
《STL源码剖析》读书笔记二--空间配置器
STL通过空间配置器为容器配置内存,它负责容器存储空间的分配、回收等一系列内存操作。统一的内存管理使得STL库的效率得到极大地提升。一、 构造和析构基本工具:Construct() 和Destory()由上图可知,析构函数更加复杂,既有泛化,又有特化,no-op表示没有操作,destory()函数的第一个版本接受两个迭代器为参数:first和last,若迭代器范围内原创 2014-07-25 10:20:55 · 863 阅读 · 0 评论 -
《STL源码剖析》学习笔记系列之三-------迭代器和traits编程
《STL源码剖析》学习笔记系列之三-------迭代器和traits编程 迭代器iterator的模式:提供一种方法,使之能够依序巡防某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式。迭代器起着算法和容器的粘合剂,算法通过迭代器操作容器内部的数据。1、 template参数推导机制1、 template 2、 inline const T&原创 2014-07-29 11:35:48 · 636 阅读 · 0 评论 -
《STL源码剖析》学习笔记系列-----第一章:STL概论和版本简介
STL原创 2014-07-12 21:24:14 · 2444 阅读 · 0 评论 -
《STL源码剖析》学习笔记系列之五——关联式容器(2)
Hashtable2.1 简介 哈希表,又名散列表,可以提供“常数时间”的插入、删除、查询等操作。不同的元素通过hash function映射到不同的位置,但当不同元素获得经hash function获得相同的位置(索引)时,则发生“碰撞”,此时需要通过以下几种方法为新加入的元素寻找新的索引地址。1、 线性探测法由于为元素准备的为一块连续内存空间地址,该方法会循序原创 2014-09-06 21:56:24 · 848 阅读 · 0 评论 -
《STL源码剖析》学习笔记系列之五——关联式容器(1)
RB-tree(红黑树)1.1简介 RB-tree属于二叉搜索树,即节点的键值一定大于其左孩子节点的键值,小于其右孩子节点的键值。RB-tree还有以下四个特征:1、 每个节点非黑即红。2、 根节点为黑色。3、 如果节点为红,其子节点必须为黑。4、 任一节点至NULL(即尾端)的任何路径,所含黑节点原创 2014-09-07 16:34:31 · 1141 阅读 · 0 评论 -
《STL源码剖析》学习笔记之四——序列式容器
STL中序列式容器包含如下:array,vector,list,deque,priority-queue,slist,stack,queue。其中array属于C++语言的内建的数据结构,另外stack和queue属于适配器,两者均采用deque作为底层的数据容器。 (一) vector1、特点:动态空间,随着元素的加入,内部机制会自行扩充空间以容纳新元素。“配置新空间,数据移动原创 2014-08-27 14:29:07 · 719 阅读 · 0 评论 -
函数指针及其应用
=========================引子========================= 我们都知道,数组名就是指向数组第一个元素的常量指针(详见《数组拾遗》)。同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指针。而编译器要做的就是在程序编译之后,为每个函数分配一个首地址,即该函数第一条指令的地址。一般情况下,我们可以用一个指针来保存这个地址,而这个指转载 2014-09-28 11:06:50 · 631 阅读 · 0 评论 -
《STL源码剖析》学习笔记系列之七、八——仿函数和配接器
1、 仿函数仿函数又名函数对象,具有函数性质的对象,就是传入一些参数,然后对参数进行某些运算,然后返回一个值。为了能够使行为类似函数,需要在类别定义中必须自定义function call 运算子operator()。仿函数有如下几类:算术类仿函数(plus、minus)关系运算类仿函数(equal_to、less)逻辑运算类仿函数(logical_and、logical_or、logica原创 2014-10-06 11:57:57 · 822 阅读 · 0 评论 -
《STL源码剖析》学习笔记系列之六——算法(1)
1 、算法的泛化过程泛化过程:把操作对象的型别加以抽象化,把操作对象的标示法和区间目标的移动行为抽象化,整个算法也就在一个抽象层面上工作了。int *find(int * arrayHead,int arraySize,int value){ for(int i=0;i if(arrayHead[i]==value) break;原创 2014-10-02 22:42:31 · 723 阅读 · 0 评论 -
C++拷贝构造函数详解
原文地址:http://blog.csdn.net/lwbeyond/article/details/6202256一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类对转载 2014-10-14 10:12:48 · 456 阅读 · 0 评论 -
《Accelerate C++》读书笔记(一)
1、输入输出库会把它的输出保存在一个叫做缓冲区的内部数据结构中,缓冲区可以优化输出操作,把几个输出操作合并到一个写操作中。有三种事情会导致系统刷新缓冲区:1、缓冲区已满;2、请求库从标准输入流中读数据;3、用户明确要求刷新。2、空白字符指在屏幕不会显示出来的字符,如空格、制表符、回车和换行符。3、C++中运算符优先级:算术>关系>逻辑;其中逻辑运算符,如||、&&具有短路求值得特点,||当原创 2014-11-02 16:24:33 · 1066 阅读 · 0 评论 -
微信后台技术相关介绍
原文地址: http://www.woshipm.com/pd/249869.html团队与技术栈简介微信后台研发团队由三位工程师组成。开发模式采用了敏捷的方式,大概一个月一个小版本,一个季度出一个大版本,另外每天都会有不停的后台更新,很多是用户看不见的,也有一些是AB测试,比如选择一亿的用户,或者一定百分比的用户,或者一部分男性用户和女性用户来做AB测试。开发语言主要使用C++转载 2015-12-14 15:56:01 · 1921 阅读 · 0 评论