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

深圳集团网站开发网站开发公司电话建设银行网站会员怎么注册

深圳集团网站开发网站开发公司电话,建设银行网站会员怎么注册,用户界面设计的重要性,中国建筑室内设计师网目录 切片的底层数据结构 扩容机制 总结#xff1a; 练习验证代码 这是切片的底层探索下篇#xff0c;上篇地址请见#xff1a;GO语言-切片底层探索#xff08;上#xff09; 在上篇我们讲解了切片的两个重要实现或者说是两个特征 切片是引用类型#xff0c;会进行…目录 切片的底层数据结构 扩容机制 总结 练习验证代码 这是切片的底层探索下篇上篇地址请见GO语言-切片底层探索上 在上篇我们讲解了切片的两个重要实现或者说是两个特征 切片是引用类型会进行引用传递切片会随着元素数量的增加进行扩容改变其底层数组的指向 这篇文章我们将会顺着讲解切片的底层数据结构和扩容机制 切片的底层数据结构 我们可以在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}}}...... } 基本机制 如果新切片的长度大于旧切片的二倍容量就直接令新切片的容量等于新切片的长度如果旧切片的容量小于256,进行二倍扩容如果就切片的容量大于等于256按照newcapnewcap3*threshold/4公式进行扩容扩容速度减缓向1.25倍进行过渡。 在基本扩容规则的基础上还会考虑元素类型与内存分配规则对实际的扩张值做一些微调。从这一个基本规则中我们可以看出Go语言对slice性能和空间使用率的思考 当切片较小时采用较大的扩容倍速可以避免频繁地扩容从而减少内容分配次数和数据拷贝的代价。当切片较大时采用较小的扩容倍速主要是为了避免空间浪费。 因此使用append()向slice添加一个元素的实现步骤如下 假如slice容量够用则将新元素追加进去slice.len返回原slice原slice容量不够则将slice先扩容扩容后得到新slice将新元素追加进新sliceslice.len返回新的slice。 总结 切片是go语言中常用的容器由于其扩容特性容易发生一些不容易被发现的错误这就需要我们对切片的底层扩容机制有足够的了解知道什么时候切片会进行扩容操作和如果高效地使用切片进行数据的存储和处理。 练习验证代码 package mainimport fmttype 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://www.hkea.cn/news/14272401/

相关文章:

  • 校园类网站模板免费下载网络建设方案模板
  • 淘宝购物网站的建设如何做网站描述
  • 十堰做网站的有哪些国际空间站vs中国空间站
  • 零基础学做网站页最新网站建设合同
  • 如何查找网站根目录wordpress覆盖安装
  • 地方门户网站发展趋势中国人均收入世界排名
  • 网站建设业建网站要
  • 公司的网站建设费用怎么入账花藤字体在线生成器
  • 律师网站模板泰安搭建公司
  • 无锡快速建设网站方法销售型网站设计
  • 做淘客网站 知乎中国做网站知名的公司
  • 微信浏览为网站的缓存怎么清理响应式网站建设市场
  • 网站开发工程师需要什么技术做办公用品网站工作计划
  • 网站推广的方法是什么衣服网站功能
  • 如何查询到某网站开发商乌克兰网站设计
  • 网站鼠标悬停动态效果海外平台推广方法
  • 重庆网站怎么做出来的自己做游戏app的网站吗
  • 境外网站建设喊人做网站需要注意些什么
  • 网站建设近义词中国风网站怎么配色
  • 关键词排名提高seo软件服务
  • 买网站服务器要多少钱wordpress 文章 分类 页面
  • 做网站银川保险网上预约
  • 网站美化的目标广东工程建设咨询有限公司网站
  • 网站建设背景分析论文哈尔滨网站建立公司
  • 霸州市网站建设电子商务网站建设与维护李建忠下载
  • 网站建设万首先金手指14wordpress二维码手工
  • 大学生网站建设方案温州网站开发流程
  • 网站焦点图怎么做搜索引擎优化seo专员
  • 校内二级网站建设整改方案同ip网站做301
  • 医院网站开发公司企信网查询