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

什么网站做外贸好宁波seo网络推广软件系统

什么网站做外贸好,宁波seo网络推广软件系统,互联网个人用户网站,wordpress关键词插件吗slice golang-slice语雀笔记整理 slicego为何设计slice?引用传递实现扩容机制 go为何设计slice? 切片对标其他语言的动态数组,底层通过数组实现,可以说是对数组的抽象,底层的内存是连续分配的所以效率高,可…

slice


golang-slice语雀笔记整理

  • slice
    • go为何设计slice?
    • 引用传递实现
    • 扩容机制

go为何设计slice?

切片对标其他语言的动态数组,底层通过数组实现,可以说是对数组的抽象,底层的内存是连续分配的所以效率高,可以通过索引查找。
image.png
**有数组了为何还要切片? **

  1. 数组长度固定,切片动态扩容,更加灵活
  2. golang官方文档明确说了go只有值传递,而通过切片可通过值传递实现引用传递

所以切片的核心在于它如何实现引用传递、 以及 切片的扩容机制

引用传递实现

切片实现引用传递主要还是跟它的数据结构有关。 在slice的结构体中有3个字段, array, len, cap; 其中的array指向底层数组开始的内存。 那么值传递的时候传的内存区域其实是同一块。此时虽然对副本修改,但实际上改的是同一块内存上的数据,就实现了引用传递。 但是对副本修改len和cap,原始数据len和cap是不会变的,比如传递切片给函数,函数内部append(s,100),输出一下s是看不到这个100的,因为输出s时是输出len个元素,len没变。

扩容机制

1.19下slice.go下的grouslice方法源码

扩容的触发时机:len跟cap相等时,下次append就是触发扩容。阅读slice.go下的growslice方法源码,可以分析slice扩容机制。
首先是计算new cap大小:
判断新申请空间是否大于 2 * old cap,如果是,那就直接使用new cap;
如果不是,判断old cap 小于 256 ?如果是,直接使用2* old cap作为new cap,如果不是,则在一个for循环里面不断给old cap扩容1/4,并且+192,直到cap 满足new cap。 这样的扩容更加平滑
根据new cap ,计算需要分配的内存大小:比如newcap * 元素大小(比如int就是newcap*8byte),向上取整推算mspan对应等级,对新切片进行初始化,然后调用memmove方法,将老切片内容拷贝到新切片并且返回。

我觉得go的切片扩容策略相比C++更加的平滑,初始阶段的扩容迅速,后面的增加更省内存。像C++的vector的话linux下1.5倍考虑到内存的复用,win+vs下2倍,是固定的倍数扩容;

http://www.hengruixuexiao.com/news/47090.html

相关文章:

  • 宁波网站建设佳选蓉胜网络好网络营销的理解
  • 政务微网站建设方案二维码推广赚佣金平台
  • 做加工都在哪个网站推广31省市新增疫情最新消息
  • 南山做网站公司有哪些线上推广的方式
  • 网站平台建设方案策划书企业整站优化
  • 佛山医疗网站建设短视频推广公司
  • 易语言网站怎么做灰色关键词排名
  • 政府网站建设分析优秀营销软文范例300字
  • 做企业网站的缺点东莞网络推广培训
  • 福州seo建站推广小程序
  • 广告联盟没有网站怎么做厦门seo报价
  • 有口碑的坪山网站建设seo专员是做什么的
  • 人社部能力建设中心网站seo网页优化公司
  • 百度seo网站优化 网络服务福州百度seo排名
  • 做网站真辛苦2345导网址导航下载
  • 做企业网站一般多少钱宁波seo教程网
  • 网站服务器错误seo网络营销外包
  • 学做家常菜的网站 知乎广点通官网
  • eclice网站开发互联网营销师怎么做
  • 全屋定制怎么样做网站首页排名seo
  • 顺企网宁波网站建设自助建站系统源码
  • app源码开发公司国外常用的seo站长工具
  • 牙膏的网站建设搜索优化网络推广
  • 襄阳做网站的公司有哪些竞价推广的企业
  • java + jsp 如何做门户网站专业网站建设公司
  • 网站排名费用百度旗下所有app列表
  • 日本wordpress宁波免费建站seo排名
  • 用JSP做电商网站dw网页制作教程
  • 垣曲做网站免费查权重工具
  • 企业网站做电脑营销网络推广有多少种方法