自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++进阶——内存管理(三)

在VC和BorlandC5.0编译器标准库内部实现中,容器的std::allocater都是通过::operator new/delete来完成的,其本质就是直接调用malloc 和 free其他什么都没有做。而GNU2.9 C++中使用的版本是std::alloc——使用了诸如pool等高级的分配逻辑,在经过更新迭代后在GNU4.9中改名为__gnu_cxx::__pool_alloc!GNU2.9中std::alloc的实现考虑到小型内存所可能造成的内存破损问题,SGI设计了双层级配置器,第..

2020-09-27 00:44:05 374

原创 C++进阶——内存管理(二)

C++ memory primitives分配 释放 类型 可否重载 malloc free C函数 不可 new delete C++表达式 不可 ::operator new ::operator delete C++函数 可 allocator<T>::allocate allocator<int>::deallocate C++标准库 可自由设计并以之搭配任何容器

2020-09-25 00:27:46 478

转载 C++进阶——内存管理(一)

[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏、内存回收这三个方面来探讨C++内存管理问题。1.

2020-09-18 00:09:18 444

转载 Android开发——内存管理及内存泄漏分析

1、堆和栈要了解Android的内存,必须先从Java的堆和栈看起,我们先看看《Think In Java》中对它们的定义:(1)堆栈(stack):位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些JAVA数据

2020-09-17 18:31:52 353

转载 Android开发——Cmakelist的使用

一、背景:Cmakelist的使用项目创建好以后我们可以看到和普通Android项目有以下4个不同。main 下面增加了 cpp 目录,即放置 c/c++ 代码的地方 module-level 的 build.gradle 有修改 增加了 CMakeLists.txt 文件 多了一个 .externalNativeBuild 目录image.png二、正文第一章:CMakeLists.txt 文件 讲解2.1 一个基本的Cmakelist文件cmake_minimum.

2020-09-17 12:02:53 4652 1

原创 C++设计模式——结构型模式之代理模式(Proxy)

代理模式(Proxy):是一种程序设计最为重要的一种模式,其具体的使用非常广泛,根据它的作用,其实我们可以直接理解为中间件或者中间层,比如各类软件的中间件,软件与硬件中的中间层。Subject: 声明真实对象和代理对象的共同接口。Proxy: 代理对象与真实对象实现相同的接口,所以它能够在任何时刻都能够代理真实对象。代理角色内部包含有对真实对象的引用,所以她可以操作真实对象,同时也可以附加其他的操作,相当于对真实对象进行封装。RealSubject: 它代表着真实对象,是最终实现功能的具体对

2020-09-15 18:43:55 255

原创 C++基础——STL常见问题总结

1. STL由哪些组件组成容器(Containers):各种数据结构,如:vector、list、deque、set、map。用来存放数据。从实现的角度来看,STL容器是一种class template。 算法(algorithms):各种常用算法,如:sort、search、copy、erase。从实现的角度来看,STL算法是一种 function template 迭代器(iterators):容器与算法之间的胶合剂,是所谓的“泛型指针”。共有五种类型,以及其他衍生变化。从实现的角度来看,迭代器

2020-09-13 18:34:33 814

原创 C++设计模式——结构型模式之组合模式(Composite)

组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式为了描述分支包含关系,也就是我们说的树形关系,其对象分为枝和叶,每一枝可包含枝和叶,直到全部为叶节点。我们对枝和叶进行行为抽象,可认为枝和叶都是Component,而叶是最小的操作单元,其下不存在枝和叶,而枝作为Composite里面存有其下枝和叶的组件列表。上述的结构图中关于叶对节点的操作方法只保留了Operator的功能,其他的如add、remove、ge

2020-09-12 00:00:04 163

原创 C++设计模式——结构型模式之桥接模式(Brige)

桥接模式(Brige):将抽象部分和它的实现部分分离,使它们都可以独立的变化。当一个抽象可能有多个实现时,通常用继承来协调它们;抽象类定义对该抽象的接口,而具体的子类则用不同方式加以实现。但有时候此方法不够灵活,因为继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立的进行修改、扩充和重用;桥接模式把依赖具体实现,提升为依赖抽象,来完成对象和变化因素之间的低耦合,提高系统的可维护性和扩展性。桥接模式的主要目的是将一个对象的变化与其它变化隔离开,让彼此之间的耦合度最低。Ab

2020-09-11 23:37:15 534

原创 C++设计模式——结构型模式之装饰器模式(Decorator)

装饰器模式(Decorator)是动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活;装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。Component:定义一个对象的对外接口,将通过这个接口来实现对象动态地添加职责; ConcreteComponent:定义一个具体的Component,继承自ConcreateComponent,重写了Component类的虚函数; Decorator:维持一个指向Component对象的指针,该指针指向需要

2020-09-11 23:00:38 234

原创 C++进阶——STL源码之unordered_set与unordered_multiset

STL源码之unordered_set与unordered_multisetstd::set 是关联容器,含有 Key 类型对象的已排序集。用比较函数 Compare 进行排序。搜索、移除和插入拥有对数复杂度。 set 通常以红黑树实现,红黑树具有自动排序的功能,因此set内部所有的数据,在任何时候,都是有序的。std::unordered_set 是含有 Key 类型唯一对象集合的关联容器,依赖于哈希表。搜索、插入和移除拥有平均常数时间复杂度。在内部,元素并不以任何特别顺序排序,而是组织进桶中,元

2020-09-11 00:09:31 770

原创 C++设计模式——结构型模式之适配器模式(Adapter)

结构型模式之适配器模式(Adapter)适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式有“类适配器”和“对象适配器”两种不同的形式。上图是适配器模式的第一种实现形式,适配器Adapter继承自Target和Adaptee类,Adapter类需要重写Target类的Request函数,在Request中做适当的处理,调用Adaptee类的SepcificRequest。最终,Target...

2020-09-10 19:34:12 154

原创 C++进阶——STL源码之unordered_map、unordered_multimap

STL源码之unordered_map、unordered_multimapSTL中几种map的区别map  内部数据的组织,基于红黑树实现,红黑树具有自动排序的功能,因此map内部所有的数据,在任何时候,都是有序的。hash_map  基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价是消耗比较多的内存。底层实现上,使用一个下标范围比较大的数组来存储元素,形成很多的桶,利用hash函数对key进行映射到不同区域进行保存。插入操作:得到key -> 通过hash

2020-09-10 00:28:10 1739

原创 Android开发——Activity的生命周期与启动模式

Activity的生命周期onCreate:Activity正在被创建,可以进行一些初始化工作:setContentView加载界面布局等onRestart:Activity正在被重新启动,正常情况下从不可见变为可见状态时,onRestart会被调用onStart:Activity正在被启动,但是当前不可见;无法与用户进行交互onResume:Activity已经可见,并出现在前台活动onPause:Activity正在停止,正常情况下会接着执行stop,不可做太耗时的操作onSto

2020-09-08 00:15:37 506

原创 Android开发——BLE蓝牙开发入门

BLE蓝牙开发入门蓝牙低能耗(Bluetooth Low Energy,或称Bluetooth LE、BLE,旧商标Bluetooth Smart)也称低功耗蓝牙,是蓝牙技术联盟设计和销售的一种个人局域网技术,旨在用于医疗保健、运动健身、信标、安防、家庭娱乐等领域的新兴应用。相较经典蓝牙,低功耗蓝牙旨在保持同等通信范围的同时显著降低功耗和成本。Android BLE 的特点是低功耗,其峰值功耗为传统蓝牙的一半,传输距离提升到100米左右,最短可在3ms内完成连接并开始数据的传输,缺点是传输的数据量较

2020-09-08 00:14:40 924

原创 C++进阶——STL源码之hashtable

STL源码之hashtablehashtable 是一种在插入、删除、搜寻等操作上也具有 “常数平均时间”(散列表)的数据结构,而且这种表现是以统计为基础,不需依赖输入元素的随机性。STL中hashtable是实现hash_map和hash_set的底层。它解决冲突的方式是开链法,每个放置索引值的节点称为桶节点(也就是该索引值的头结点),桶节点里放着一个value值,一个指向下一个节点的next指针。 维护了一个vector<node *> buckets存放所有桶节点,...

2020-09-04 23:53:21 1174

原创 C++设计模式——创建型模式之原型模式(Prototype)

原型模式是用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象;这这个定义中,最重要的一个词是“拷贝”,也就是原型模式的精髓所在;其中Clone就是对原型实例对象的拷贝,它封装了其中的拷贝细节,用户并不需要关心起内部的实现;在C++一般通过拷贝构造函数来实现;当然一提到拷贝构造函数,必然会涉及到浅拷贝和深拷贝的问题;原型模式看似很简单,但拷贝的细节还是很多的(这里并不去讨论拷贝相关的细节)。#include <iostream>using namespace std;

2020-09-04 22:08:31 144

原创 C++设计模式——创建型模式之建造者模式(Builder)

创建型模式之建造者模式(Builder)建造者模式(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder:抽象的创造者,为创建一个产品对象的各个部件指定抽象的接口;ConcreteBuilder:具体建造者,实现抽象Builder定义的接口来完成产品的各个部件的创建。Director:指挥者,它是一个使用Builder接口的对象;Product:具体的产品对象。代码框架#include <iostream>#

2020-09-03 22:57:51 265

原创 C++进阶——STL源码之map与multimap

STL源码之map与multimapmapmap的特性是,所有元素都会根据元素的键值自动被排序;map的所有元素都是pair,同时拥有实值(value)和 键值 (key),pair的第一个元素视为键值,第二个元素视为实值;map不允许两个元素具有相同的键值。map的迭代器可以用来修改元素的实值(value),修改元素的实值并不会影响map的排列规则;map的迭代器不可以用来改变map的键值,因为修改map的键值会严重破坏map的结构。map对其中的元素进行删除或者新增操作,操作之前的

2020-09-02 00:05:29 572

原创 C++进阶——STL源码之set与multiset

STL源码之set与multisetsetset的特性是,所有元素都会根据元素的键值自动被排序,set元素的键值就是实值,实值就是键值,set不允许两个元素有相同的键值。set的元素值不可以通过迭代器来改变,因为set元素就是其键值,关系到set元素的排列规则;如果任何改变set元素值,会严重破坏set组织。set是以rb-tree作为底层机制,又由于set所开放的各种操作接口,rb-tree也提供,所以几乎所有的set操作行为都只是调用rb-tree的操作行为。set源码1. se

2020-09-01 23:43:21 784

原创 C++设计模式——创建型模式之单例模式(Singleton Pattern)

单例模式(Singleton Pattern)单例 Singleton 是一种只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例;在使用单例模式时需要注意一下几点:全局只有一个实例并同时禁止用户定义实例(构造函数设为 private) 线程安全 禁止赋值和拷贝 用户通过接口获取实例懒汉式的单例模式下面这个单例模式中,处理了线程安全的问题,当多线程获取单例时有可能引发竞态条件:第一个线程在if中判断p是空的,于是开始实例化单例;同时第2个线程也尝试获取.

2020-09-01 18:21:34 219

原创 C++设计模式——创建型模式之工厂模式

简单工厂模式为了提高内聚和松耦合,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口;这样可以通过声明一个指向基类的指针指向实际的子类来实现,达到多态的目的;但是当子类对象很多时,就会给创建带来麻烦,并造成扩展性和维护性困难。简单工厂是对类的创建进行封装,通过参数来控制子类对象的创建。class Product {};class ProductA : public Product{};class ProductB : public Product {};class Product

2020-09-01 15:52:24 229

3D数学基础 图形与游戏开发

3D数学基础 图形与游戏开发,3D数学基础 图形与游戏开发,3D数学基础 图形与游戏开发

2016-02-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除