看板 Touhou 關於我們 聯絡資訊
相信各位對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