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

网站中文字内容左右切换的js代码彩票网站给实体店做代销

网站中文字内容左右切换的js代码,彩票网站给实体店做代销,深圳有几个区哪个区最富裕,wordpress 媒体库图片不显示Go 语言中的 slice 是一种灵活、动态的视图#xff0c;是对底层数组的抽象。当对 slice 进行追加元素等操作导致其长度超过容量时#xff0c;就会发生扩容。 一、扩容的基本原理 当 slice 需要扩容时#xff0c;Go 语言会根据当前的容量来确定新的容量。一般来说#xff…Go 语言中的 slice 是一种灵活、动态的视图是对底层数组的抽象。当对 slice 进行追加元素等操作导致其长度超过容量时就会发生扩容。 一、扩容的基本原理 当 slice 需要扩容时Go 语言会根据当前的容量来确定新的容量。一般来说新的容量通常是原容量的 2 倍。例如如果一个 slice 的容量是 10那么在扩容后新的容量会变成 20。这种扩容策略使得 slice 的容量能够快速增长以满足不断添加元素的需求。 但是当 slice 的容量超过 1024 时扩容的策略会有所改变。新的容量会增加原容量的一半。比如原容量是 2048扩容后的新容量会是 2048 2048 / 2 3072。这种策略可以避免在容量很大时一次性分配过多的内存从而减少内存浪费。 上面这种扩容机制是一种很常见的说法, 但是有时候, 我们还需要内存对齐, 所以上面这个扩容机制应该变成大于1.25倍和2倍 // 注意返回的是一个新的切片 func growslice(et * _type, old slice, cap int) slice { // ......newcap: old.capdoublecap: newcap newcapif cap doublecap {newcap cap} else {//小于1024if old.len 1024 {// 扩容两倍newcap doublecap} else {// 如果小于newcapfor 0 newcap newcap cap {newcap newcap / 4}if newcap 0 {newcap cap}}}// 内存对齐capmem roundupsize(capmem)newcap int(capmem / et.size) // ...... }内存分配和数据复制 在确定了新的容量后Go 语言会分配一块新的内存空间来存储底层数组。这块新内存的大小是根据新的容量来确定的其元素类型与原 slice 底层数组的元素类型相同。 然后会将原底层数组中的数据复制到新的内存空间中。这个复制过程是逐个元素进行的确保数据的完整性和顺序不变。例如原 slice 中有 [1, 2, 3, 4] 这些元素扩容后这些元素会被复制到新的底层数组中仍然保持 [1, 2, 3, 4] 的顺序。 最后slice 的指针会指向新的底层数组长度和容量等属性也会相应更新。原来的底层数组所占用的内存可能会被垃圾回收机制回收除非还有其他的变量引用它。 我们会写一个具体的例子来看: package mainimport fmtfunc main() {s: [] int {1, 2}s append(s, 4, 5, 6)fmt.Printf(len%d, cap%d, len(s), cap(s)) }通过答应上面这个的结果cap 的结果是6, 如果按照原来的说法应该是这样的: 小于1024 添加第一个元素4, cap 扩容两倍, 实际是2*24添加5的时候, 不需要进行扩容,添加6的时候, 扩容两倍变成8, 但是结果却是6 但是这种计算过程是错误的: // 其中cap当前是5 growslice(et * _type, old slice, cap int) cap doublecap old.cap * 2 4 所以目前的cap 是为5 然后会执行对应的内存对齐函数: capmem roundupsize(uintptr(newcap) * sys.PtrSize) // sys.PtrSize 大小为 8。 class_to_size[size_to_class8[(sizesmallSizeDiv-1)/smallSizeDiv]]其中smallsizediv 的大小是8, 然后size40 最终得到的结果是对应的6值 二、扩容的性能影响 时间开销 扩容操作涉及到内存分配和数据复制这会消耗一定的时间。内存分配的时间开销取决于操作系统和当前的内存状况。在内存充足的情况下分配内存的速度相对较快。但是如果系统内存紧张分配内存可能会需要等待从而增加时间开销。 数据复制的时间开销与原底层数组的大小成正比。如果原数组很大复制数据就需要更多的时间。例如对于一个包含数百万个元素的 slice扩容时的数据复制操作可能会导致程序在短时间内出现明显的延迟。 空间开销 每次扩容后都会多出一部分未使用的内存空间。这是为了后续添加元素预留的。虽然这种策略可以减少频繁扩容的次数但在某些情况下如果 slice 的最终大小并没有达到预期就会造成内存浪费。例如一个 slice 只需要添加 10 个元素但由于扩容策略它的容量可能被扩展到 20 或更大这就多占用了一部分内存。 三、优化扩容的建议 预先分配足够的容量 如果在使用 slice 之前能够预估大致的元素数量可以在创建 slice 时就预先分配足够的容量。例如如果知道要存储 1000 个元素可以使用 make([]int, 0, 1000) 来创建一个长度为 0、容量为 1000 的 slice。这样就可以避免多次扩容提高程序的性能。 使用 Append 操作的优化形式 当需要向 slice 中添加多个元素时可以尽量减少对 append 函数的调用次数。例如如果有多个元素要添加可以先将它们存储在一个临时的 slice 中然后一次性使用 append 将临时 slice 添加到目标 slice 中。这样可以减少扩容的次数因为一次性添加多个元素可能会直接触发一次较大规模的扩容而不是多次小规模的扩容。
http://www.hkea.cn/news/14389371/

相关文章:

  • 广西送变电建设公司网站seo服务加盟
  • 动态模板网站建设中国建设教育网官网
  • 沂水县的旅游景区的网站建设河南省建设监理协会网站证书查询
  • 如何建设教师网上授课网站wordpress 图片显示插件下载
  • 四川网站建设的公司哪家好本地安装好的wordpress怎么传到服务器上
  • 佛山外贸网站建设报价上海崇明林业建设有限公司 网站
  • 做兼职用什么网站最好山西省住房和城乡建设厅网站报名
  • 自助免费网站制作建小网站多少钱
  • 网站投票链接怎么做的国内主要的o2o电商平台
  • 网站开发语言查看器广告推广平台代理
  • 酒店设计网站建设方案全国建筑业四库一平台
  • 做首页网站成品网站建设加后台
  • 购物网站开店免费云南手工活外发加工网
  • 景点介绍网站模板怎么样提升自己的学历
  • 商务网站建设数据处理百度怎么做开锁网站
  • 重庆今天最新新闻短视频seo公司
  • 网站经常做封面的那些番号小米的企业网站建设思路
  • 男科医院网站建设达川网站制作
  • 建设应用型网站的意义怎么把网站生成二维码
  • 工装设计效果图网站杭州网络推广平台
  • 昆明网站词排名优化企业网站管理系统cms源码下载
  • 个性化网站模板做网站建设销售途径
  • 做1688网站需要懂英语吗邢台太行中学高考成绩
  • 事业单位网站模板导购网站模板免费下载
  • 律师网站建站检察院网站建设方案
  • 谷歌 网站开发公司的网站建设费用怎么入账
  • 公司网站如何制作设计wordpress 随机播放
  • 乒乓球网站怎么做电影wordpress
  • 企业信息管理2018年企业网站优化应该怎么做
  • 网站搭建哪里找有名气搭建网站多少时间