亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang切片擴容規(guī)則實現(xiàn)

 更新時間:2021年03月03日 09:36:58   作者:weixin_37509194  
這篇文章主要介紹了golang切片擴容規(guī)則實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

golang擴容規(guī)則

在這里插入圖片描述

舉個例子來演示下

package main

import (
"fmt"
)
func main() {
arr1 := [4]int{1,2,3,4}
//此時slice1為[1,2,3] 長度為3,容量為4
slice1 :=arr1[:3]
fmt.Println(slice1,len(slice1),cap(slice1))
slice1 = append(slice1,5000,6000)
fmt.Println(slice1,len(slice1),cap(slice1))
}

此時容量由原來的4擴容到了8,你以為就是簡單的2倍嗎?那你可真理解錯了,你得知道他背后擴容的原因,我來給你計算下
1、原來的容量為4,追加了5000,6000后變?yōu)榱?個,此時4*2>6,滿足了腦圖中的第二種情況,并且元素個數(shù)小于1024,先擴容2倍
2、由于64位操作系統(tǒng)下,一個int類型占8個字節(jié),所以8*8=64
3、此時匹配操作系統(tǒng)預先分配好的內(nèi)存規(guī)格,規(guī)則正好匹配了64,所以用64/8=8,所以擴容后的容量為8

在這里插入圖片描述

咱們再來一個例子看你是否真正理解了他的擴容規(guī)則, 這個例子最后容量為10

package main

import (
	"fmt"
)
func main() {
	arr1 := [4]int{1,2,3,4}
	//此時slice1為[1,2,3] 長度為3,容量為4
	slice1 :=arr1[:3]
	fmt.Println(slice1,len(slice1),cap(slice1))
	slice1 = append(slice1,5000,6000,7000,8000,9000,10000)
	fmt.Println(slice1,len(slice1),cap(slice1))
}

在這里插入圖片描述

···
慌不慌,你是不懂了嗎?不懂我給你好好算一下
1⃣️原來容量是4,此時追加了5個元素,變?yōu)榱?
2⃣️4*2<9,滿足腦圖中的第一個條件,由于int類型在64位操作系統(tǒng)下占用8個字節(jié),所以用9*8=72
3⃣️所以此時需要匹配的內(nèi)存規(guī)格為80
4⃣️用80/8=10,所以此時容量為10

···
元素個數(shù)大于1024的我就不給你展示了,原理都是一樣的,認認真真看完之后擴容規(guī)則肯定就懂了,不用再看其他的了

總結(jié):切片擴容規(guī)則和你追加的元素個數(shù)有關
切片擴容和你匹配的操作系統(tǒng)分配的內(nèi)存規(guī)格有關
和你定義的切片類型有關

到此這篇關于golang切片擴容規(guī)則實現(xiàn)的文章就介紹到這了,更多相關golang切片擴容 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Golang錯誤處理:異常捕捉和恢復機制

    Golang錯誤處理:異常捕捉和恢復機制

    Golang中,異常處理是通過 defer + panic + recover 的方式來實現(xiàn)的,使用 defer 可以將清理操作注冊到函數(shù)執(zhí)行完畢后執(zhí)行,而 panic 和 recover 可以用于處理異常,通過組合使用這些功能,可以實現(xiàn)更加健壯的程序
    2024-01-01
  • go語言心跳超時的實現(xiàn)示例

    go語言心跳超時的實現(xiàn)示例

    本文主要介紹了go語言心跳超時的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Mac OS系統(tǒng)安裝golang教程

    Mac OS系統(tǒng)安裝golang教程

    這篇文章主要介紹了Mac OS系統(tǒng)安裝golang教程,本文還同時介紹了Sublime Text開發(fā)工具的配置,需要的朋友可以參考下
    2015-01-01
  • Golang中堆排序的實現(xiàn)

    Golang中堆排序的實現(xiàn)

    堆是一棵基于數(shù)組實現(xiàn)的特殊的完全二叉樹,本文主要介紹了Golang中堆排序的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 深入了解Golang中Slice切片的使用

    深入了解Golang中Slice切片的使用

    本文主要為大家詳細介紹了Golang中Slice切片的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-02-02
  • Golang中的深拷貝與淺拷貝使用

    Golang中的深拷貝與淺拷貝使用

    本文主要介紹了Golang中的深拷貝與淺拷貝使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 在?Golang?中使用?Cobra?創(chuàng)建?CLI?應用

    在?Golang?中使用?Cobra?創(chuàng)建?CLI?應用

    這篇文章主要介紹了在?Golang?中使用?Cobra?創(chuàng)建?CLI?應用,來看下?Cobra?的使用,這里我們使用的?go1.13.3?版本,使用?Go?Modules?來進行包管理,需要的朋友可以參考下
    2022-01-01
  • 一文帶你了解Go中的內(nèi)存對齊

    一文帶你了解Go中的內(nèi)存對齊

    一旦涉及到較為底層的編程,特別是與硬件交互,內(nèi)存對齊是一個必修的課題,所以這篇文章小編就想來和大家聊一聊Go語言中的內(nèi)存對齊,希望對大家有所幫助
    2023-10-10
  • GoLang strings.Builder底層實現(xiàn)方法詳解

    GoLang strings.Builder底層實現(xiàn)方法詳解

    自從學習go一個月以來,我多少使用了一下strings.Builder,略有心得。你也許知道它,特別是你了解bytes.Buffer的話。所以我在此分享一下我的心得,并希望能對你有所幫助
    2022-10-10
  • Golang配置管理庫?Viper的教程詳解

    Golang配置管理庫?Viper的教程詳解

    這篇文章主要介紹了Golang?配置管理庫?Viper,使用?viper?能夠很好的去管理你的配置文件信息,比如數(shù)據(jù)庫的賬號密碼,服務器監(jiān)聽的端口,你可以通過更改配置文件去更改這些內(nèi)容,而不用定位到那一段代碼上去,提高了開發(fā)效率,需要的朋友可以參考下
    2022-05-05

最新評論