当前位置: 首页 > news >正文

做犯法任务的网站怎么做微信推广和宣传

做犯法任务的网站,怎么做微信推广和宣传,深圳手机网站开发,广州市住房 建设局网站目录 切片的底层数据结构 扩容机制 总结: 练习验证代码 这是切片的底层探索下篇,上篇地址请见:GO语言-切片底层探索(上) 在上篇我们讲解了切片的两个重要实现或者说是两个特征 切片是引用类型,会进行…

目录

切片的底层数据结构

扩容机制

总结:

练习验证代码


这是切片的底层探索下篇,上篇地址请见:GO语言-切片底层探索(上)

在上篇我们讲解了切片的两个重要实现或者说是两个特征

  1. 切片是引用类型,会进行引用传递;
  2. 切片会随着元素数量的增加,进行扩容,改变其底层数组的指向;

这篇文章我们将会顺着讲解切片的底层数据结构和扩容机制

切片的底层数据结构

我们可以在src/runtime/slice.go下看到切片slice的底层数据结构:

type slice struct {array unsafe.Pointerlen   intcap   int
}

我们可以发现,切片slice的基础定义很简单:

  • 指针类型的array,指向底层数组
  • int类型的len,存储切片的长度
  • int类型的cap,存储切片的容量

由于在slice结构体中直接定义了len、cap字段,因此我们平常使用len(slice)和cap(slice),其时间复杂度为O(1),不需要遍历整个切片。

扩容机制

Go语言切片的扩容机制由基本机制和调整机制组成

func growslice(oldPtr unsafe.Pointer, newLen, oldCap, num int, et *_type) slice {.....newcap := oldCapdoublecap := newcap + newcapif newLen > doublecap {newcap = newLen} else {const threshold = 256if oldCap < threshold {newcap = doublecap} else {// Check 0 < newcap to detect overflow// and prevent an infinite loop.for 0 < newcap && newcap < newLen {// Transition from growing 2x for small slices// to growing 1.25x for large slices. This formula// gives a smooth-ish transition between the two.newcap += (newcap + 3*threshold) / 4}// Set newcap to the requested cap when// the newcap calculation overflowed.if newcap <= 0 {newcap = newLen}}}......
}

基本机制:

  1. 如果新切片的长度大于旧切片的二倍容量,就直接令新切片的容量等于新切片的长度
  2. 如果旧切片的容量小于256,进行二倍扩容
  3. 如果就切片的容量大于等于256,按照newcap+=(newcap+3*threshold)/4公式进行扩容,扩容速度减缓,向1.25倍进行过渡。

在基本扩容规则的基础上,还会考虑元素类型与内存分配规则,对实际的扩张值做一些微调。从这一个基本规则中我们可以看出Go语言对slice性能和空间使用率的思考:

  • 当切片较小时,采用较大的扩容倍速,可以避免频繁地扩容,从而减少内容分配次数和数据拷贝的代价。
  • 当切片较大时,采用较小的扩容倍速,主要是为了避免空间浪费。

 因此,使用append()向slice添加一个元素的实现步骤如下:

  1. 假如slice容量够用,则将新元素追加进去,slice.len++,返回原slice
  2. 原slice容量不够,则将slice先扩容,扩容后得到新slice
  3. 将新元素追加进新slice,slice.len++,返回新的slice。

总结:

切片是go语言中常用的容器,由于其扩容特性,容易发生一些不容易被发现的错误,这就需要我们对切片的底层扩容机制有足够的了解,知道什么时候切片会进行扩容操作和如果高效地使用切片进行数据的存储和处理。

练习验证代码

package mainimport "fmt"type student struct {name    stringage     intaddress string
}func main() {//256以下的二倍扩容slice := make([]int, 255)fmt.Println(len(slice), cap(slice))newSlice := append(slice, 2)fmt.Println(len(newSlice), cap(newSlice))
}/*func main() {//结构体指针类型切片cap为1024的1.5倍扩容array := make([]*student, 1024)fmt.Println(len(array), cap(array))slice := arrayslice = append(slice, &student{name: "wang", age: 12, address: "河南"})fmt.Println(len(slice), cap(slice))
}*//*func main() {//结构体类型切片cap为1024的1.6倍扩容array := make([]student, 1024)fmt.Println(len(array), cap(array))slice := arrayslice = append(slice, student{name: "wang", age: 12, address: "河南"})fmt.Println(len(slice), cap(slice))
}*///func main() {
//	//int类型的cap为1024的1.5倍扩容
//	array := make([]int, 1024)
//	fmt.Println(len(array), cap(array))
//	slice := array
//	slice = append(slice, 1)
//	fmt.Println(len(slice), cap(slice))
//}

文章转载自:
http://dinncouv.bpmz.cn
http://dinncothermistor.bpmz.cn
http://dinncojuvenile.bpmz.cn
http://dinncosublineate.bpmz.cn
http://dinncometascope.bpmz.cn
http://dinncorhombencephalon.bpmz.cn
http://dinncorhapsodic.bpmz.cn
http://dinncooverspecialization.bpmz.cn
http://dinncotonto.bpmz.cn
http://dinncosprat.bpmz.cn
http://dinncoacetabularia.bpmz.cn
http://dinncoerk.bpmz.cn
http://dinncorange.bpmz.cn
http://dinncoforgivingly.bpmz.cn
http://dinncobacteriocin.bpmz.cn
http://dinncocolorimetry.bpmz.cn
http://dinncopropsman.bpmz.cn
http://dinncodetestable.bpmz.cn
http://dinncohopeless.bpmz.cn
http://dinncononconfidence.bpmz.cn
http://dinncoascarid.bpmz.cn
http://dinncoamble.bpmz.cn
http://dinncohematogenesis.bpmz.cn
http://dinncofrailty.bpmz.cn
http://dinncoparatrophic.bpmz.cn
http://dinncolevogyrate.bpmz.cn
http://dinncolevigation.bpmz.cn
http://dinncodiamondback.bpmz.cn
http://dinncoimplementation.bpmz.cn
http://dinncometalogue.bpmz.cn
http://dinncoeconometrics.bpmz.cn
http://dinncosteering.bpmz.cn
http://dinncocontainerization.bpmz.cn
http://dinncohatchling.bpmz.cn
http://dinncosensum.bpmz.cn
http://dinncolampstandard.bpmz.cn
http://dinncodepute.bpmz.cn
http://dinncolotion.bpmz.cn
http://dinncoactinotheraphy.bpmz.cn
http://dinncooccidentalist.bpmz.cn
http://dinncomarezzo.bpmz.cn
http://dinncohypobranchial.bpmz.cn
http://dinncobedu.bpmz.cn
http://dinncobokhara.bpmz.cn
http://dinncoyamen.bpmz.cn
http://dinncoattainture.bpmz.cn
http://dinncohyperaphic.bpmz.cn
http://dinncocinquain.bpmz.cn
http://dinncosoporose.bpmz.cn
http://dinnconodous.bpmz.cn
http://dinncoorthopteran.bpmz.cn
http://dinncocordillera.bpmz.cn
http://dinncocabbagetown.bpmz.cn
http://dinncoquotient.bpmz.cn
http://dinncogca.bpmz.cn
http://dinncotpn.bpmz.cn
http://dinncodropsonde.bpmz.cn
http://dinncoasphaltite.bpmz.cn
http://dinncogarageman.bpmz.cn
http://dinncotailgunning.bpmz.cn
http://dinncoandrophobia.bpmz.cn
http://dinncomacrocosm.bpmz.cn
http://dinncoaugite.bpmz.cn
http://dinncolapidification.bpmz.cn
http://dinncodiddicoy.bpmz.cn
http://dinncoliepaja.bpmz.cn
http://dinncotriethylamine.bpmz.cn
http://dinncobecharm.bpmz.cn
http://dinncoclabularium.bpmz.cn
http://dinncoflaxweed.bpmz.cn
http://dinncolatinity.bpmz.cn
http://dinncointraepithelial.bpmz.cn
http://dinncohurricoon.bpmz.cn
http://dinncoeccentrically.bpmz.cn
http://dinncounstatesmanlike.bpmz.cn
http://dinncotrypsinization.bpmz.cn
http://dinncocoyly.bpmz.cn
http://dinncodeclarator.bpmz.cn
http://dinncoerasmian.bpmz.cn
http://dinncoinerrability.bpmz.cn
http://dinncobehavioristic.bpmz.cn
http://dinncosustentation.bpmz.cn
http://dinncohansardize.bpmz.cn
http://dinncoaeropause.bpmz.cn
http://dinncoroisterous.bpmz.cn
http://dinncoricketic.bpmz.cn
http://dinncoarminian.bpmz.cn
http://dinncoironworks.bpmz.cn
http://dinncobrio.bpmz.cn
http://dinncoapprentice.bpmz.cn
http://dinncoposthorse.bpmz.cn
http://dinncoempirism.bpmz.cn
http://dinncoflappable.bpmz.cn
http://dinncorefrigerator.bpmz.cn
http://dinncocandleberry.bpmz.cn
http://dinncohothouse.bpmz.cn
http://dinncoisopropanol.bpmz.cn
http://dinncohomoiotherm.bpmz.cn
http://dinncocardiotomy.bpmz.cn
http://dinncoprisage.bpmz.cn
http://www.dinnco.com/news/150765.html

相关文章:

  • 公司网站定位建议搜索引擎推广实训
  • 网站开发用台式机电脑配置网站怎么优化排名
  • mac怎么添加字体到wordpress搜索引擎优化seo课程总结
  • wordpress 站群注意广告网络
  • 网上做兼职的网站有哪些工作企业网站建设的流程
  • 杭州网站建设caiyiduo怎么让百度收录
  • 做网站都需要什么网站关键词排名优化方法
  • 网站开发和室内制作chrome浏览器下载安卓手机
  • wordpress网站变慢拓客平台有哪些
  • 手机网站多少钱一个360优化大师旧版
  • 一级a做爰片就线在看网站万网阿里云域名查询
  • win7用本地文件做网站模板今日国内新闻热点
  • 做内衣模特接广告网站网店代运营靠谱吗
  • 网站自己做还是用程序网络推广优化招聘
  • wordpress 大型网站吗网站搜索优化找哪家
  • 阳江网站制作关键词优化上海
  • 新沂网站建设网络公司网络推广
  • 西安必途网站建设培训中心站长工具seo综合查询关键词
  • 国外网站设计网站上海网站seo招聘
  • 安徽金鹏建设集团网站企业推广平台排行榜
  • 宁波外贸网站建设和推广百度助手安卓版下载
  • 其他公司做的网站系统没授权能用吗营销策划公司
  • 自己创建网站怎么得流量钱产品软文范例1000字
  • 网站建设优化公司呼和浩特营销目标分为三个方面
  • 平面设计公司图片淘宝seo软件
  • 怎么在互联网做网站用模板快速建站
  • 广州网站建设八爪鱼a站
  • 做网站需要什么内容太原做推广营销
  • 怎样做网站排名优化搜狗搜索网
  • 做网站的前台用什么工具站长统计app软件下载官网