[ ⑨ ] PADDING

看板Touhou作者 (霧丸)時間12年前 (2012/05/23 21:53), 編輯推噓31(3103)
留言34則, 31人參與, 最新討論串1/1
相信各位對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

05/23 21:58, , 1F
看不懂的我算是正常嗎?
05/23 21:58, 1F

05/23 21:59, , 2F
看到padding就想到css的padding...這算是職業病嗎orz
05/23 21:59, 2F

05/23 22:01, , 3F
我只想到pudding...
05/23 22:01, 3F

05/23 22:12, , 4F
資工推
05/23 22:12, 4F

05/23 22:13, , 5F
完全可以理解...
05/23 22:13, 5F

05/23 22:16, , 6F
奇怪我大學到底在學什麼 orz 看得懂可是沒印象
05/23 22:16, 6F
※ 編輯: kirimaru73 來自: 1.161.195.101 (05/23 22:17)

05/23 22:33, , 7F
www
05/23 22:33, 7F

05/23 22:35, , 8F
.....你明天要考計組期中考對吧
05/23 22:35, 8F

05/23 22:35, , 9F
XDDDDDDDDDDDDD
05/23 22:35, 9F

05/23 22:36, , 10F
還有我覺得這篇TAG改成⑨比較對(?)
05/23 22:36, 10F

05/23 22:50, , 11F
寫的太好了
05/23 22:50, 11F

05/23 23:20, , 12F
原來如此,人家完全看不懂  ̄▽ ̄|||
05/23 23:20, 12F

05/23 23:21, , 13F
原來是計組,難怪我沒印象www (差點被當)
05/23 23:21, 13F

05/24 00:01, , 14F
資工推!
05/24 00:01, 14F

05/24 00:53, , 15F
我看到 FFT 大笑 XDDDDDDDDDDDDDDDDDDDDDDDDDDDD
05/24 00:53, 15F

05/24 01:16, , 16F
狂熱巨乳
05/24 01:16, 16F

05/24 02:15, , 17F
只覺得某人會很火並且準備大量飛刀XDD
05/24 02:15, 17F

05/24 03:23, , 18F
(笑倒地
05/24 03:23, 18F

05/24 07:42, , 19F
非理工科系看的懂...但是卻有莫名的喜感XD
05/24 07:42, 19F

05/24 07:51, , 20F
懂一點但這也太wwww
05/24 07:51, 20F

05/24 07:51, , 21F
資工人推
05/24 07:51, 21F

05/24 08:03, , 22F
好煩XDDDDDDDDDDDDDDDDDDDDDDDDDDD
05/24 08:03, 22F

05/24 10:07, , 23F
推解惑(重點錯
05/24 10:07, 23F
※ 編輯: kirimaru73 來自: 123.50.53.228 (05/24 11:42)

05/24 11:48, , 24F
舉73cm 不對 73bit也太過份了 XDDDD
05/24 11:48, 24F

05/24 14:37, , 25F
資工人推+1
05/24 14:37, 25F

05/24 17:43, , 26F
沒上過計組,不過完全可以理解XDDDDDD
05/24 17:43, 26F

05/24 19:12, , 27F
資工推XD"
05/24 19:12, 27F

05/24 23:01, , 28F
太神了XD
05/24 23:01, 28F

05/25 03:10, , 29F
推FFT
05/25 03:10, 29F

05/25 17:03, , 30F
73+7!!! 73+7!!! 73+7!!! 73+7!!! 73+7!!! 73+7!!!
05/25 17:03, 30F

05/27 11:12, , 31F
我已經相信你了XDDDDDDDDDDDDD 73還是比某72大啦
05/27 11:12, 31F

05/27 12:27, , 32F
下次用阿空來講解核能系統...
05/27 12:27, 32F

06/01 17:47, , 33F
資工人推...XD
06/01 17:47, 33F

09/03 11:23, , 34F
朝聖一下 這裡是哪裡阿...
09/03 11:23, 34F
文章代碼(AID): #1FlElSFB (Touhou)