作者kirimaru73 (霧丸)
看板Touhou
標題[ ⑨ ] PADDING
時間Wed May 23 21:53:10 2012
相信各位對PAD這個詞都不陌生,但是,你真的了解PAD的意義嗎?
在電腦資料處理上,PAD是一個十分重要的行為。
實際敘述上,則會以英文動名詞的詞性來表示,也就是PADDING。
PADDING並非永遠是必要的手段,但在需要時絕對少不了他。
簡單說,
PADDING是一種利用少許空間,來換取美觀與實用的行為。
假設我們有如下的數筆資料:
73
┌────┐
咲夜1
咲夜2
咲夜3
咲夜4
所有咲夜的長度都是相等的,73cm......嗯抱歉,應該說是位元組。
73公....位元組在某些情況下,是一個既不美觀,又不實用的數字。
當然,這並非永遠如此,在某些場合中73仍然是很實用的。
會讓資料不實用的原因之一,與電腦讀取資料的方式有關。
當上述資料並排在一起存放時,各筆資料的開始與結束位置如下:
0 73 146 219
↓ ↓ ↓ ↓
咲夜1 咲夜2 咲夜3 咲夜4
然而,電腦在讀取資料時有一個性質:
「一次讀取的資料量,以及讀取的開頭位置,必須為特定單位的倍數。」
由於電腦是使用二進位法,所以這個單位就是二的某次方,例如16。
所以,當電腦在讀取
咲夜1這筆資料時,從0到64的部分是比較沒有問題的。
但是從64到73這一部分卻無法簡單地一個動作讀取完成。
當然,電腦還是做的到這件事情。
只要讀取64到80的部分,也就是
咲夜1的結尾和
咲夜2的開頭,
再把不需要的部分忽略掉,就可以獲得所需要的資料。
但是這種較複雜的動作,也會花費比較多的時間。
因此,追求程式計算速度的人會盡量避免這種情形。
如果需要直接讀取任一筆資料,情況會變得更複雜。
例如,現在需要
咲夜2這一份資料,也就是73到146這一段。
因為73不是16的倍數,所以電腦必須從64開始讀取。
又因為64到146這一部分的長度是82,也不是16的倍數,
所以電腦必須從64一口氣讀取到160,再去頭去尾才能取得所需要的資料。
PADDING的目的之一,就是為了解決這種麻煩。
我們只要將所有咲夜都加上長度為7的PAD,讓她們的長度都變成80:
73 7
┌────┬─┐
咲夜1 PAD
咲夜2 PAD
咲夜3 PAD
咲夜4 PAD
這樣並排在一起的咲夜就會變成下面這樣:
0 80 160 240
↓ ↓ ↓ ↓
咲夜1 PAD 咲夜2 PAD 咲夜3 PAD 咲夜4 PAD
如此一來,不管是讀取任何一筆資料,開始和結束都會是16的倍數。
用想像的也很容易理解:80這個數字,不管怎麼說都比73好看多了。
這就是PADDING的精髓:
犧牲一點空間,換取相對划算的美觀與實用性。
值得一提的是,
PADDING是一種依個人需求自行安排的行為。
所以PAD的大小並不是一個固定值,而是依不同需求而決定的。
在上面的例子中,假設電腦讀取資料時有16這個單位長度的限制。
但是對於不同的資料讀取指令來說,這個長度也可能是其他的數值。
但無論如何,他們一定是2的某次方。
如果今天的單位長度限制是32,那上面的PAD就不夠用了。
但是沒關係,只要改變PAD的大小就可以了:
73 23
┌────┬──┐
咲夜1 PAD
咲夜2 PAD
咲夜3 PAD
咲夜4 PAD
這樣一來,咲夜的長度變成了96。32的限制就輕鬆解決了。
而且96這個數字豈止是實用而已,光是想像就讓人興奮啊。
當然,PAD對於原資料而言是多餘的部分。
過大的PAD會讓資料存放多出額外的需求空間。
在這個時候,PADDING的效益是否能夠彌補空間上的犧牲,
就是一個要好好考慮,甚至進行實驗來做決定的問題了。
除了電腦讀取資料的限制之外,還有另外一個PADDING的理由:
「這筆資料必須被拿來執行某個動作,
但是,該動作要求資料的長度一定要是某個數值。」
如果今天有一個人跟你說,73、80、96這種長度都不夠看,一定要128這種數字才行。
可想而知,這應該是某種狂熱巨乳中毒症狀。
(Frantic F-cup Toxication,簡稱FFT)
為了滿足這種特殊需求,PAD的大小就會相當驚人:
73 55
┌────┬───┐
咲夜1 PAD
咲夜2 PAD
咲夜3 PAD
咲夜4 PAD
這種狀況通常都是無法選擇的。
資料讀取限制只是會讓你多花一點時間,但特殊動作的限制多半都是毫無彈性。
你要不就是犧牲大量空間,要不就是放棄FFT這種動作。
因此,PADDING絕對不只是一個笑點而已。
它是一個非常重要,甚至可以說是神聖的行為。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.161.195.101
推 makoto888:看不懂的我算是正常嗎? 05/23 21:58
推 ljkl8mklmo:看到padding就想到css的padding...這算是職業病嗎orz 05/23 21:59
推 KaguyaNEET:我只想到pudding... 05/23 22:01
推 hikaru677:資工推 05/23 22:12
推 YakumoRan:完全可以理解... 05/23 22:13
→ apaapa:奇怪我大學到底在學什麼 orz 看得懂可是沒印象 05/23 22:16
※ 編輯: kirimaru73 來自: 1.161.195.101 (05/23 22:17)
推 Dino60128:www 05/23 22:33
→ NightDream08:.....你明天要考計組期中考對吧 05/23 22:35
推 synparabola:XDDDDDDDDDDDDD 05/23 22:35
推 NightDream08:還有我覺得這篇TAG改成⑨比較對(?) 05/23 22:36
推 chang101w:寫的太好了 05/23 22:50
推 TundereAlice:原來如此,人家完全看不懂  ̄▽ ̄||| 05/23 23:20
→ apaapa:原來是計組,難怪我沒印象www (差點被當) 05/23 23:21
推 end81235:資工推! 05/24 00:01
推 yshinri:我看到 FFT 大笑 XDDDDDDDDDDDDDDDDDDDDDDDDDDDD 05/24 00:53
推 zaoa3345678:狂熱巨乳 05/24 01:16
推 ab95687:只覺得某人會很火並且準備大量飛刀XDD 05/24 02:15
推 ParseeM:(笑倒地 05/24 03:23
推 boonone:非理工科系看的懂...但是卻有莫名的喜感XD 05/24 07:42
推 pairslipper:懂一點但這也太wwww 05/24 07:51
推 martintp6:資工人推 05/24 07:51
推 Frodera:好煩XDDDDDDDDDDDDDDDDDDDDDDDDDDD 05/24 08:03
推 a3602611:推解惑(重點錯 05/24 10:07
※ 編輯: kirimaru73 來自: 123.50.53.228 (05/24 11:42)
推 ShadowIVII:舉73cm 不對 73bit也太過份了 XDDDD 05/24 11:48
推 LGA2011:資工人推+1 05/24 14:37
推 roycsw:沒上過計組,不過完全可以理解XDDDDDD 05/24 17:43
推 Anauma:資工推XD" 05/24 19:12
推 elfswordsman:太神了XD 05/24 23:01
推 iamnotgm:推FFT 05/25 03:10
推 komani131990:73+7!!! 73+7!!! 73+7!!! 73+7!!! 73+7!!! 73+7!!! 05/25 17:03
推 newest:我已經相信你了XDDDDDDDDDDDDD 73還是比某72大啦 05/27 11:12
推 YakumoRan:下次用阿空來講解核能系統... 05/27 12:27
推 soem:資工人推...XD 06/01 17:47
推 chuegou: 朝聖一下 這裡是哪裡阿... 09/03 11:23