丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁 > 話題廣場 > 攻略專題 > 游戲問答

10內(nèi)存如何分配?我來告訴你答案Go 切片內(nèi)存分配

切片是數(shù)組的抽象。切片使用數(shù)組作為基本結(jié)構(gòu)。片包含三個(gè)組件:容量、長度和指向基本數(shù)組的指針。


通過使用 append 或 copy 函數(shù)可以增加切片的容量。 append 函數(shù)可以為數(shù)組的末尾增加值,并在需要時(shí)增加容量。s :=[]string{} for i:=0;i<10;i++ { s = append(s,"i") t.Log(len(s),cap(s)) } 123456 slice_test.go:25: 1 1 slice_test.go:25: 2 2 slice_test.go:25: 3 4 slice_test.go:25: 4 4 slice_test.go:25: 5 8 slice_test.go:25: 6 8 slice_test.go:25: 7 8 slice_test.go:25: 8 8 slice_test.go:25: 9 16 slice_test.go:25: 10 16 12345678910

當(dāng)前儲存空間存不下數(shù)據(jù)時(shí),空間會以之前的空間數(shù)*2

比如:

numbers := make([]int,5,10) numbers = append(numbers, 1,2,3,4,5) t.Log(numbers,cap(numbers)) 123

定義 numbers 的數(shù)組長度為5 ,空間給他10,并追加數(shù)據(jù)到切片。

slice_test.go:11: [0 0 0 0 0 1 2 3 4 5] 10 1

空間為10, 當(dāng)我們再添加一個(gè)數(shù)據(jù)到切片時(shí)候,空間是多少了呢?

numbers := make([]int,5,10) numbers = append(numbers, 1,2,3,4,5,6) t.Log(numbers,cap(numbers)) 123 slice_test.go:11: [0 0 0 0 0 1 2 3 4 5 6] 20 1

得到數(shù)據(jù)為20,和我們設(shè)想的一樣。

注意

切片中的數(shù)據(jù)是共用內(nèi)存,也就是我們選區(qū)切片區(qū)間的某一個(gè)值,并且在這個(gè)小對象中進(jìn)行數(shù)據(jù)的修改,會影響整個(gè)切片的值,在開發(fā)當(dāng)中非常要注意這種。

舉個(gè)例子:

numbers := make([]int,5,10) numbers = append(numbers, 1,2,3,4,5) t.Log(numbers,cap(numbers)) first := numbers[5:7] second := numbers[6:8] t.Log(first,len(first),cap(first)) t.Log(second,len(second),cap(second)) second[0] = 9 t.Log(first,len(first),cap(first)) t.Log(second,len(second),cap(second)) t.Log(numbers) 12345678910111213

取了一個(gè)first 和second 這兩個(gè)數(shù)據(jù)重合的數(shù)據(jù)是2.

打印一下:

slice_test.go:11: [0 0 0 0 0 1 2 3 4 5] 10 slice_test.go:15: [1 2] 2 5 slice_test.go:16: [2 3] 2 4 slice_test.go:19: [1 9] 2 5 slice_test.go:20: [9 3] 2 4 slice_test.go:21: [0 0 0 0 0 1 9 3 4 5] 123456

雖然在second 中修改了數(shù)據(jù),但是影響到了大對象numbers 的數(shù)據(jù),還有一個(gè)要注意的是,first 小對象,他的內(nèi)存分配是5,second 的空間是4,這是為啥呢?原來,這樣取的小對象切片,的空間是這個(gè)切片加上大對象末尾的值

開發(fā)中如果修改了其中的一個(gè)變量,但是又不想影響大對象,這個(gè)時(shí)候會傻掉。

那如何去獲取一個(gè)和numbers 一樣的數(shù)據(jù),但是又不會影響numbers呢?

我們copy一份numbers

number2 := make([]int, len(numbers)) copy(number2, numbers) t.Log(number2,cap(numbers),cap(number2)) number2[0] = 9 t.Log(number2,numbers,cap(numbers),cap(number2)) 12345678

輸出一下結(jié)果:

slice_test.go:11: [0 0 0 0 0 1 2 3 4 5] 10 slice_test.go:15: [1 2] 2 5 slice_test.go:16: [2 3] 2 4 slice_test.go:19: [1 9] 2 5 slice_test.go:20: [9 3] 2 4 slice_test.go:21: [0 0 0 0 0 1 9 3 4 5] slice_test.go:25: [0 0 0 0 0 1 9 3 4 5] 10 10 slice_test.go:29: [9 0 0 0 0 1 9 3 4 5] [0 0 0 0 0 1 9 3 4 5]10 10 12345678

好,不懂在座的各位看懂了沒有。沒有影響的,通過copy 切片再去修改切片的值,是不會印象原切片的。

關(guān)于切片的知識,還遠(yuǎn)遠(yuǎn)不止這些,后續(xù)遇到問題,再補(bǔ)充吧,歡迎關(guān)注

1.《10內(nèi)存如何分配?我來告訴你答案Go 切片內(nèi)存分配》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《10內(nèi)存如何分配?我來告訴你答案Go 切片內(nèi)存分配》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請保留本站內(nèi)容來源地址,http://f99ss.com/gl/2147148.html

上一篇

0x800b010a什么意思?終于找到答案了Windows 10可選更新又出問題:隨機(jī)卡死 、藍(lán)屏和性能問題

下一篇

007最近更新的電影是什么?總結(jié)很全面速看!《007:無暇赴死》提檔,北美影院11月20日上映,邦德再次戰(zhàn)斗

10內(nèi)存如何分配?終于找到答案了Go 切片內(nèi)存分配

10內(nèi)存如何分配?終于找到答案了Go 切片內(nèi)存分配

10內(nèi)存如何分配相關(guān)介紹,切片是數(shù)組的抽象。切片使用數(shù)組作為基本結(jié)構(gòu)。片包含三個(gè)組件:容量、長度和指向基本數(shù)組的指針。 通過使用 append 或 copy 函數(shù)可以增加切片的容量。 append 函數(shù)可以為數(shù)組的末尾增加值,...

10內(nèi)存如何分配?總結(jié)很全面速看!簡述現(xiàn)在高端機(jī)上的內(nèi)存擴(kuò)展技術(shù),8GB+2GB不等于10GB

10內(nèi)存如何分配?總結(jié)很全面速看!簡述現(xiàn)在高端機(jī)上的內(nèi)存擴(kuò)展技術(shù),8GB+2GB不等于10GB

10內(nèi)存如何分配相關(guān)介紹,一款旗艦手機(jī)入門版的存儲配置為8GB 128GB。其中8GB是內(nèi)存,即執(zhí)行內(nèi)存,128GB是閃存,即手機(jī)存儲空間。 其中內(nèi)存的速度更快,比閃存更能影響手機(jī)的使用體驗(yàn),當(dāng)然前提是閃存的容量夠用。 增加內(nèi)...

10內(nèi)存如何分配看這里!手機(jī)內(nèi)存應(yīng)該怎么選?看這一篇就夠了

10內(nèi)存如何分配看這里!手機(jī)內(nèi)存應(yīng)該怎么選?看這一篇就夠了

10內(nèi)存如何分配相關(guān)介紹,“你的手機(jī)內(nèi)存有多少?單擊 “是70G。” “咦?手機(jī)內(nèi)存還是70克嗎?不都是64克、128克、256克嗎?” “沒錯(cuò)。我買的時(shí)候選了“6 64”。那不是70G?!?” “……” 大家在購買手機(jī)的時(shí)候...

10內(nèi)存如何分配?終于找到答案了C語言內(nèi)存分配問題

10內(nèi)存如何分配?終于找到答案了C語言內(nèi)存分配問題

10內(nèi)存如何分配相關(guān)介紹,1、c的內(nèi)存分為四個(gè)區(qū)域 堆棧:用于存儲函數(shù)的格式參數(shù)和函數(shù)中的局部變量。 由編譯器分配空間,在函數(shù)執(zhí)行完后由編譯器自動(dòng)釋放。 堆:用來存放由動(dòng)態(tài)分配函數(shù)(如malloc)分配的空間。是由程序員自己手...

關(guān)于10內(nèi)存如何分配,你需要知道這些2021年買手機(jī),內(nèi)存選6GB還是8GB?聰明人會這么選

關(guān)于10內(nèi)存如何分配,你需要知道這些2021年買手機(jī),內(nèi)存選6GB還是8GB?聰明人會這么選

10內(nèi)存如何分配相關(guān)介紹,由于安卓與iPhone系統(tǒng)不同,導(dǎo)致iPhone就算是4GB內(nèi)存也能夠流暢運(yùn)行,暢玩大型游戲,系統(tǒng)流暢體驗(yàn)絲毫不卡頓,但如果換成是安卓手機(jī),4GB顯然不夠用了,所以安卓用戶今年買手機(jī)選6GB還是8GB...