欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:Golang----切片

柚子快報(bào)激活碼778899分享:Golang----切片

http://yzkb.51969.com/

一、切片與數(shù)組的區(qū)別

(1)切片是一個(gè)長(zhǎng)度可變的數(shù)據(jù)類型,其長(zhǎng)度在定義時(shí)可以為空,也可以指定一個(gè)初始長(zhǎng)度。數(shù)組是一個(gè)長(zhǎng)度固定的數(shù)據(jù)類型,其長(zhǎng)度在定義時(shí)就已經(jīng)確定了,不能動(dòng)態(tài)改變。

(2)切片的內(nèi)存空間是在運(yùn)行時(shí)動(dòng)態(tài)分配的,其大小可以改變;數(shù)組的內(nèi)存空間是在定義時(shí)分配的,其大小是固定的。

(3)切片作為函數(shù)的參數(shù)時(shí),傳遞的是底層數(shù)組。函數(shù)操作切片的引用,會(huì)影響底層數(shù)組;數(shù)組作為函數(shù)參數(shù)時(shí),函數(shù)操作的是數(shù)組的一個(gè)副本,不會(huì)影響原始數(shù)組。

(4)切片有容量的概念,指的是分配的內(nèi)存空間。且切片本身是一個(gè)結(jié)構(gòu)體。

二.切片自身結(jié)構(gòu)體及與底層數(shù)組

在Golang里,切片本身是一個(gè)結(jié)構(gòu)體,包含三個(gè)字段。

type slice struct{

array unsafe.Pointer //指向第一個(gè)元素的地址

len int

cap int

}

1.指針: 指向 slice 可以訪問(wèn)到的第一個(gè)元素。 2.長(zhǎng)度: slice 中元素個(gè)數(shù)。 3.容量: slice 起始元素到底層數(shù)組最后一個(gè)元素間的元素個(gè)數(shù)。

當(dāng)切片是截取已定義數(shù)組而定義時(shí),切片是數(shù)組的一個(gè)引用,修改切片的值會(huì)直接修改數(shù)組的值。當(dāng)直接通過(guò)make定義切片或直接聲明切片或基于另一個(gè)切片定義時(shí),切片的底層數(shù)組對(duì)程序員是不可見(jiàn)的,只能通過(guò)切片操作底層數(shù)組。(當(dāng)切片基于另一個(gè)切片定義時(shí),兩者共享同一個(gè)底層數(shù)組)

三、切片的擴(kuò)容機(jī)制

Go 中切片的擴(kuò)容機(jī)制是基于動(dòng)態(tài)數(shù)組的,這意味著切片的底層數(shù)組會(huì)動(dòng)態(tài)調(diào)整大小以適應(yīng)元素的增加。下面是 Go 切片擴(kuò)容的一般過(guò)程:

1.初始分配:

當(dāng)使用 make 創(chuàng)建一個(gè)切片時(shí),Go 會(huì)為其分配一塊初始的底層數(shù)組

2.追加元素:

使用 append 向切片追加元素時(shí),Go 會(huì)檢查是否有足夠的容量來(lái)容納新的元素。如果有足夠的容量,新元素會(huì)被添加到底層數(shù)組的末尾,切片的長(zhǎng)度會(huì)增加。如果沒(méi)有足夠的容量,就需要進(jìn)行擴(kuò)容。

3.擴(kuò)容:

當(dāng)切片需要擴(kuò)容時(shí),Go 會(huì)創(chuàng)建一個(gè)新的更大的底層數(shù)組(具體的擴(kuò)容策略看下面擴(kuò)容原理)。然后,原數(shù)組的元素會(huì)被復(fù)制到新數(shù)組中,新元素會(huì)被添加到新數(shù)組的末尾。最后,切片的引用會(huì)指向新的底層數(shù)組,原數(shù)組會(huì)被垃圾回收。

擴(kuò)容過(guò)程? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.如果期望容量大于當(dāng)前容量的兩倍就會(huì)使用期望容量; 2.如果當(dāng)前切片的長(zhǎng)度小于閾值(默認(rèn) 256)就會(huì)將容量翻倍; 3.如果當(dāng)前切片的長(zhǎng)度大于等于閾值(默認(rèn) 256),就會(huì)每次增加 25% 的容量,基準(zhǔn)是 newcap + 3*threshold,直到新容量大于期望容量;

總的來(lái)說(shuō),Go的設(shè)計(jì)者不斷優(yōu)化切片擴(kuò)容的機(jī)制,其目的只有一個(gè):就是控制讓小的切片容量增長(zhǎng)速度快一點(diǎn),減少內(nèi)存分配次數(shù),而讓大切片容量增長(zhǎng)率小一點(diǎn),更好地節(jié)省內(nèi)存。

如果只選擇翻倍的擴(kuò)容策略,那么對(duì)于較大的切片來(lái)說(shuō),現(xiàn)有的方法可以更好的節(jié)省內(nèi)存。 如果只選擇每次系數(shù)為1.25的擴(kuò)容策略,那么對(duì)于較小的切片來(lái)說(shuō)擴(kuò)容會(huì)很低效。 之所以選擇一個(gè)小于2的系數(shù),在擴(kuò)容時(shí)被釋放的內(nèi)存塊會(huì)在下一次擴(kuò)容時(shí)更容易被重新利用

柚子快報(bào)激活碼778899分享:Golang----切片

http://yzkb.51969.com/

文章來(lái)源

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/18952669.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄