sizeof与MemoryLayout

sizeof 在C语言中,可能会经常与sizeof打交道,用来计算数据占用内存大小。在C中sizeof即可以作用于类型也可以作用于某个实际的变量,并返回其在内存中的尺寸size_t。 在Swift 3以前,也有sizeof,不过与C中的运算符不同,它经过了一层包装,变成了一个只接受类型的方法,而接受具体值的则为另一个方法: sizeofValue func sizeof<T>(_: T.Type) -> Int func sizeofValue<T>(_: T) -> Int 不过sizeofValue接受的虽然是具体值,但是返回的是这个值的实际大小,而不是其内容的大小。所以与C中用sizeof拿来计算数组内容在内存中占据的尺寸不一样: // C char bytes[] = {1, 2, 3}; sizeof(bytes); // 3 int bytes[] = {1,…

Read this article

元类型: .Type与.self

元类型 元类型就是类型的类型。 比如我们说 5 是 Int 类型,此时 5 是 Int 类型的一个值。但是如果我问 Int 类型占用多少内存空间,这个时候与具体某个值无关,而和类型的信息相关。如果要写一个函数,返回一个类型的实例内存空间大小。那么这个时候的参数是一个类型数据,这个类型数据可以是直接说明的比如是 Int 类型,也可以从一个值身上取,比如 5 这个值的类型。这里的类型数据,就是一个类型的类型,术语表述为元类型:metaType。 .Type和.self Swift 中的元类型用 .Type 表示。比如 Int.Type 就是 Int 的元类型。 类型与值有着不同的形式,就像 Int 与 5 的关系。元类型也是类似,…

Read this article

祝大家开工大吉吧!

Read this article

iOS内存用量分析

前言 我们在查看iOS应用内存时,最常见的手法就是查看左边的Debug Navigator。不知你是否也曾困惑于这个内存究竟包括哪些部分,或者使用Allocations模版观察内存时发现无法和Debug Navigator显示的内存匹配上,这篇文章将带你解答这些疑惑。 Debug Navigator VS Allocations 我们运行一个很简单的iOS App,我只在ViewController中放置了一个View,然后对比下Debug Navigator 和 Allocations给出的内存用量。 可以发现,Debug Navigator给出的是79.3M,而Allocations统计的所有堆和相关VM加起来才38.72M,相差的还是很多的。在之前的文章中我有介绍关于Allocations和VM Tracker的深入理解,其实Allocations中主要包含的是所有MALLOCXXX VM Region和部分App进程创建的VM Region。非动态的内存,以及部分其他动态库创建的VM Region并不在Allocations的统计范围内。比如主程序或者动态库的DATA数据段,这些数据内存区域并非通过malloc分配,也就没有统计在All Heap Allocations中,所以你会发现All Heap Allocations往往会比较小。除非你自行使用malloc系列方法创建大内存块,否则很难看到All Heap Allocations有一个大的数值。我们在实际的App中,大的内存占用一般都是类似于WebKit,ImageIO,…

Read this article

2018.12.31

2018最后一天,总感觉要说点什么才舒服,但是事实上并不会。 这一年真的很忙,忙到自己的都没什么时间。博客好久没更新了,上一次更新,已经是好几个月前了。 朝九晚十的工作已经成为了习惯,或许这也只是为自己的懒惰找了一个借口吧。 昨天晚上躺在床上,找出了我最喜欢的2004无与伦比演唱会重温了一遍。太妈的太帅了,太他妈的经典了,每一首歌,都是我逝去的青春,为了防止晚上看多了感动到大小便失禁,我还是忍住了只看了一遍。 这一年真的快,快到才知道什么叫眼睁睁的看它溜走,快到让你无奈,快到让你无所适从。 逢8的年份果然都不是什么好年,98年洪水,08年地震,18年股市暴跌、币圈暴跌、大规模公司裁员、互联网寒冬、P2P暴雷···早在17年就预料逢8必炸,但是毕竟上天是洪水猛兽,螳臂当车,你挡都挡不住,该来的还是要来。 中国是一个讲究仪式感的国家,就像我这篇博客一样,虽然噼里啪啦写了一堆,可能一点卵用也没有,但是讲究的是一种仪式感。 晚上跟十年老友朋友…

Read this article