内存类型

WWDC 2015 - 压缩App的大小(App Thining in Xcode)

和自甴很熟 提交于 2019-11-29 12:33:36
原文地址: http://www.pluto-y.com/wwdc-2015-app-thining-in-xcode/ 最近在研究WWDC2015,主要研究一下iOS 9和Xcode 7中的特性,方便之后学习,顺带可以装装逼。最近看了关于压缩App大小的视频,主要看苹果在这方面都做了哪些调整以及一些新的内容。 参考视频: App Thining in Xcode , 英文不错的童鞋或者想看原生资源的童鞋可以去看看。 下面开始讲述一下我学习到的内容。如果不想看理论内容的人可以直接查看 程序员所关注的细节 。 原理 关于App的内容 一般对于App来说就是分为两个部分 * 可运行代码 * 资源文件等 而其中的根据每个部分所占的比例可分为两种类型的,一种为可运行代码比例比较大的App,另一种为资源文件比例比较大的App。而对于大部分情况来说都是后者比较多,即如图所示: 而对于资源文件来说,可以根据不同的设备类型,不同的内存,不同的编译指令可以进行不同的分配不同的资源,通过对资源文件的分类可以使App在不同的设备上运行的更加流畅与完美。具体的分类条件可以根据下图进行分类: 而根据不同的设备可能会去加载不同的资源文件,如下图的例子: 对于iPad Mini的设备来说(如果添加了不同分类的资源的话),设备自动去加载armv7,1x iPad以及其他跟iPad Mini有关的配置相关的资源文件

MYSQL性能调优

允我心安 提交于 2019-11-29 03:43:32
摘要 为了学习研究MySQL数据库在工作原理,深刻理解MySQL在企业运用时如何保证其高效运行。分别从表结构的优化,SQL语句的优化,存储引擎的选择,索引的优化以及现今MySQL的发展与其他企业级数据库的比较。介绍了从编码选择到数据类型的选择以及从整体的角度设计表结构。在SQL语句的选择和使用的介绍的时候,深入介绍了一些基本的使用原则以及在一般在使用过程中我们存在的误区以及如何解决这些问题。着重介绍了MySQL的几个存储引擎MyISAM、InnoDB和NDBCluster的差异以及各自的适用范围。有介绍了MySQL的索引的一些优化的建议以及高屋建瓴地阐述和比较了MySQL的优劣和发展态势。 前言 数据库作为应用作为广泛,地位极为重要的中间件应用,学习和使用数据库管理系统变得越来越重要。为了研究和总结对mysql数据库的学习结果,特别从数据表结构、sql语句优化、存储引擎的选择、索引的应用、以及mysql的比较总结对mysql技术做了一个比较全面升入的介绍。使用mysql的过程中,如何更好地使用与优化越来越重要,在这篇文章中就阐述。 第一章 表结构的优化 数据表是数据库的具体表现形式,设计优良的数据库拥有良好的表结构,者不单单指数据库的表需要满足范式结构,为了更有利于具体操作,表结构还需要实际的可扩展性,以便于做增删改查,又需要根据数据表的具体作用做出调节

redis的对象

二次信任 提交于 2019-11-29 02:17:52
    简介:redis并没有直接使用前面所提到的基本数据结构,而是基于基本的数据结构构造了一个对象系统。这个系统包含了字符串对象,列表对象,哈希对象,集合对象,有序集合对象五种类型的对象。每种对象都用到了至少一种我们前面所说的数据结构。 对象的类型和编码   redis使用对象来表示数据库中的键和值,每次当我们在redis数据库中创建一个键值对的时候,我们至少会创建两个对象。   redis中的每个对象都由一个redisObject结构表示:      1.对象类型    对象有以下几种类型:       对于redis数据库来说,键总是一个字符串对象,值可能是上述五种对象的其中一种。 地方   Type命令在面对不同类型对象时所产生的输出如下:      2.对象编码   encodeing属性决定了ptr指针指向的底层数据结构的数据结构类型也称为对象编码。      每种类型的对象至少对应了两种不同的编码,下面列出每种对象可以使用的编码。   使用object encoding命令可以查看一个数据库的值对象的编码      下表展示了不同编码对象对应的object encoding命令的输出   通过encoding属性去设置对象的编码方式,极大地提高了redis存储对象的底层数据结构的灵活性,因为不同的数据结构适用的存储场景不一样,比如列表对象包含的元素比较少的时候

缓存系列-Redis入门教程

情到浓时终转凉″ 提交于 2019-11-28 18:59:25
Redis是什么? Redis (REmote DIctionary Server)是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列,是一个高性能的key-value数据库。 Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 为什么要用Redis 性能极高 – Redis读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 原子 – Redis的所有操作都是原子性的,即要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 丰富的特性 – Redis还支持publish/subscribe, key过期等特性。 Redis的数据类型及使用场景 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合

指针大小为什么与类型无关

倖福魔咒の 提交于 2019-11-28 13:53:22
  指针的大小与硬件有关。   内存中有各种各样的数据,整型、浮点型、字符型等等。这些数据在内存中占据不同大小的储存空间,用sizeof运算符(注:sizeof是种运算符而不是函数,它在编译时发挥作用)进行运算时结果是不同的。然而不同类型的指针在相同系统环境下进行这种运算时结果却是相同的。   众所周知,C语言中的指针描述的是内存中的地址。而内存地址这种东西则是由CPU进行编址的。对于一个4位的CPU来讲,它能同时输出的数据为4位,即0000-1111共2^4 种情况,故这些二进制数字只能对应到16个位置的内存地址,即CPU仅能识别出16个内存地址。即便你的内存再大,它也显示只有16个位置的内存可用。这种原理同样应用于32位和64位的CPU。   32位的CPU能同时呈现32个位的数据,故有2^32 种情况,对应到2^32 个内存位置也就是最大3.85GB大小,因此32位的系统只能支持最大4GB的内存。相比之下,64位的CPU能同时吞吐2^64 位的数据,这显然能够对应到2^64 个内存的地址,而理论上这个大小换算成10进制则是相当大的数,如果对应到内存,此时一个很大的内存。所以我们说64位系统理论支持无穷大内存(这里的无穷大只是一种概念,因为我们不可能用到如此巨大容量的内存)。   综上,因为指针存放的是地址,所以32位内存,共4个字节;64位系统的64位地址共8个字节—

面试题

别等时光非礼了梦想. 提交于 2019-11-28 12:34:48
为什么学python 答题路线:a、python的优点,b、python的应用领域广 具体: 优点 1、python语法非常优雅,简单易学 2、免费开源 3、跨平台,可以自由移植 4、可扩展,可嵌入性强 5、第三方库丰富 应用领域 1、在系统编程中应用广泛,比如说shell工具。 2、在网络爬虫方面功能非常强大,常用的库如scrapy,request等 3、在web开发中使用也很广泛,如很多大型网站都用python开发的,如ins,youtube等,常用的框架如django,flask等 4、python在系统运维中应用广泛,尤其在linux运维方面,基本上都是自动化运维。 5、在人工智能,云计算,金融等方面也应用非常广泛。 通过什么途径学习python 通过看官方文档 通过哔哩哔哩上的视频教程 通过百度查资料 通过买python相关方面的书 公司线上和开发环境使用的什么系统 线上用的centos和Ubuntu系统 开发环境用的windows,mac,还有Ubuntu。 python和java、php、c、c#、c++ 等其他语言对比? Java C# PHP Python (开发效率高),这些语言本身不需要你去管理内存了。它们都有自己的虚拟机,对于开辟内存、释放内存都由这个虚拟机处理。 C 和 Python、Java、C#等C语言: 代码编译得到 机器码

Django的性能优化

帅比萌擦擦* 提交于 2019-11-28 10:35:48
Django的性能优化 一,利用标准数据库优化技术 传统数据库优化技术博大精深,不同的数据库有不同的优化技巧,但重心还是有规则的。在这里算是题外话,挑两点通用的说说:    索引,给关键的字段添加索引,性能能更上一层楼,如给表的关联字段,搜索频率高的字段加上索引等。Django建立实体的时候,支持给字段添加索引,具体参考Django.db.models.Field.db_index。按照经验,Django建立实体之前应该早想好表的结构,尽量想到后面的扩展性,避免后面的表的结构变得面目全非。    使用适当字段类型,本来varchar就搞定的字段,就别要text类型,小细节别不关紧要,后头数据量一上去,愈来愈多的数据,小字段很可能是大问题。 二 ,了解Django的QuerySets   了解Django的QuerySets对象,对优化简单程序有至关重要的作用。QuerySets是有缓存的,一旦取出来,它就会在内存里呆上一段时间,尽量重用它。 # 了解缓存属性: >>> entry = Entry.objects.get(id=1) >>> entry.blog # 博客实体第一次取出,是要访问数据库的 >>> entry.blog # 第二次再用,那它就是缓存里的实体了,不再访问数据库 >>> entry = Entry.objects.get(id=1) >>> entry

高性能go服务之高效内存分配

雨燕双飞 提交于 2019-11-28 10:16:41
高性能go服务之高效内存分配 手动内存管理真的很坑爹(如C C++),好在我们有强大的自动化系统能够管理内存分配和生命周期,从而解放我们的双手。 但是呢,如果你想通过调整JVM垃圾回收器参数或者是优化go代码的内存分配模式话来解决问题的话,这是远远不够的。自动化的内存管理帮我们规避了大部分的错误,但这只是故事的一半。我们必须要合理有效构建我们的软件,这样垃圾回收系统可以有效工作。 在构建高性能go服务Centrifuge时我们学习到的内存相关的东西,在这里进行分享。Centrifuge每秒钟可以处理成百上千的事件。Centrifuge是Segment公司基础设施的关键部分。一致性、行为可预测是必须的。整洁、高效和精确的使用内存是实现一致性的重要部分。 这篇文章,我们将介绍导致低效率和与内存分配相关的生产意外的常见模式,以及消除这些问题的实用方法。我们会专注于分配器的核心机制,为广大开发人员提供一种处理内存使用的方法。 使用工具 首先我们建议的是避免过早进行优化。Go提供了出色的分析工具,能够直接指向内存分配密集的代码部分。没有必要重新造轮子,我们直接参考Go官方 这篇文章 即可。它为使用pprof进行CPU和分配分析提供了可靠的demo。我们在Segment中用于查找生产Go代码中的瓶颈的工具就是它,学会使用pprof是基本要求。 另外,使用数据去推动你的优化。 逃逸分析

深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别

橙三吉。 提交于 2019-11-28 06:05:02
转自:https://blog.csdn.net/liusicheng2008_liu/article/details/80412586 1 数组的本质    数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。。 2 指针。    指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址。。由于地址也是整数,在32位平台下,指针默认为32位。。 3 指针的指向?    指向的直接意思就是指针变量所保存的其他的地址单元中所存放的数据类型。    int * p ;//p 变量保存的地址所在内存单元中的数据类型为整型 float *q;// ........................................浮点型 不论指向的数据类型为那种,指针变量其本身永远为整型,因为它保存的地址。 4 字符数组。。。 字面意思是数组,数组中的元素是字符。。确实,这就是它的本质意义。 char str[10]; 定义了一个有十个元素的数组,元素类型为字符。 C语言中定义一个变量时可以初始化。 char str[10] = {"hello world"}; 当编译器遇到这句时,会把str数组中从第一个元素把hello world\0 逐个填入。。 由于C语言中没有真正的字符串类型,可以通过字符数组表示字符串,因为它的元素地址是连续的

基本数据类型和引用类型的区别

こ雲淡風輕ζ 提交于 2019-11-28 05:51:23
基本数据类型: byte: JAVA中数据类型最小的单位,在内存中占8个位(bit),占一个字节,取值范围为-128~127,默认为0; short: 短整型,在内存中占16位,即占2个字节,取值范围为-32768-32717,默认为0; int: 整型,在内存中占32位,即占4个字节,取值范围为-2147483648~2147483647,默认为0; long: 长整型,内存中占64位,即占8个字节,取值范围为-2^63~2^63-1,默认值OL; float: 浮点型,在内存中占32位,即4个字节,用于存储带小数的数字(与double的区别是有效小数点只有6~7位有效数字),默认为0; double: 双精度浮点型,也是用于存储带小数的数字(有效小数点后只有16位有效数字),在内存中占64位,即8个字节,默认为0; char:字符型,用于存储单个字符,在内存中占16位,占2个字节,取值范围0~65535,默认值为空; boolean:布尔类型,占一个字节,用于判断真或假(仅有2个值,即true和false),默认为false; Java数据类型基本概念: 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言