在不同語言裡,對分配記憶體不同做法,go語言分為兩種方式,一種是new,一種是make,這兩種方式有很大的差別,我們new乙個型別,比如new(int)
的時候怎麼分配記憶體呢,它計算出型別的長度,int是8bit,然後在堆上或者也可能在棧上分配空間然後返回這個指標,不管是什麼型別都是一樣的。
new乙個陣列new([8]byte)
計算型別的長度8bit,分配8位元組記憶體空間,指標返回;
new乙個切片new(byte)
計算型別長度(ptr(8bit)+len(8bit)+cap(8bit)),三個字段組成的24位元組記憶體空間,指標返回。
new並不會把復合結構完整的去建立,它只計算出當前這個型別究竟需要占用多大的記憶體空間。很顯然用new建立切片,這個切片本身是沒有辦法工作的,其中指標ptr沒有指向任何底層的陣列,因為切片是用來管理陣列的,如果被管理的物件不存在的話,那這個管理物件本身沒有任何意義。
go語言對於一些復合結構使用了乙個語法糖,表面上看上去make函式,但實際上這個make函式是乙個語法糖結構,當我們去make(byte,0,8)
時候,首先會建立切片本身頭物件(ptr,len,cap),然後建立底層陣列,陣列容量是8個,然後把指標指向開始位置,len設為0,cap設為8。很顯然make操作就包含了幾個步驟:
整個make操
切片的基礎使用
m list range 100 通過range函式建立乙個0 99的數列,組成乙個list賦值給m m 0,1,2,3,4,5,6,99 m 10 取前十個數 0,1,2,3,4,5,6,7,8,9 m 10 取後十個數 90,91,92,93,94,95,96,97,98,99 m 10 20 ...
MBTiles切片資料標準
create table tiles zoom level integer,tile column integer,tile row integer,tile data blob 必須包含乙個為tiles的表 可以是檢視 create table metadata name text,value t...
使用ffmpeg切片出hls
測試的時候經常要用到ffmpeg切hls的流 ffmpeg re i g media baifa.mp4 codec copy f hls hls list size 4 hls wrap 20 hls time 15 g media demo index.m3u8 主要是 hls wrap引數 這...