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

當前位置:首頁 > 話題廣場 > 攻略專題 > 游戲問答

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

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


通過使用 append 或 copy 函數(shù)可以增加切片的容量。 append 函數(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

當前儲存空間存不下數(shù)據(jù)時,空間會以之前的空間數(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, 當我們再添加一個數(shù)據(jù)到切片時候,空間是多少了呢?

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

舉個例子:

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

取了一個first 和second 這兩個數(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ù),還有一個要注意的是,first 小對象,他的內(nèi)存分配是5,second 的空間是4,這是為啥呢?原來,這樣取的小對象切片,的空間是這個切片加上大對象末尾的值

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

那如何去獲取一個和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

輸出一下結果:

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 切片再去修改切片的值,是不會印象原切片的。

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

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

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

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

上一篇

0105和0060聲卡有什么區(qū)別?終于找到答案了修車必懂的發(fā)動機故障碼,請收好!

下一篇

0元購邀請碼怎么填?我來告訴你答案10月12日cdf會員購免稅商品比價清單及值得買商品推薦

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

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

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

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

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

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

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

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

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

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

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

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