作者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
1F:推 makoto888:看不懂的我算是正常吗? 05/23 21:58
2F:推 ljkl8mklmo:看到padding就想到css的padding...这算是职业病吗orz 05/23 21:59
3F:推 KaguyaNEET:我只想到pudding... 05/23 22:01
4F:推 hikaru677:资工推 05/23 22:12
5F:推 YakumoRan:完全可以理解... 05/23 22:13
6F:→ apaapa:奇怪我大学到底在学什麽 orz 看得懂可是没印象 05/23 22:16
※ 编辑: kirimaru73 来自: 1.161.195.101 (05/23 22:17)
7F:推 Dino60128:www 05/23 22:33
8F:→ NightDream08:.....你明天要考计组期中考对吧 05/23 22:35
9F:推 synparabola:XDDDDDDDDDDDDD 05/23 22:35
10F:推 NightDream08:还有我觉得这篇TAG改成⑨比较对(?) 05/23 22:36
11F:推 chang101w:写的太好了 05/23 22:50
12F:推 TundereAlice:原来如此,人家完全看不懂  ̄▽ ̄||| 05/23 23:20
13F:→ apaapa:原来是计组,难怪我没印象www (差点被当) 05/23 23:21
14F:推 end81235:资工推! 05/24 00:01
15F:推 yshinri:我看到 FFT 大笑 XDDDDDDDDDDDDDDDDDDDDDDDDDDDD 05/24 00:53
16F:推 zaoa3345678:狂热巨乳 05/24 01:16
17F:推 ab95687:只觉得某人会很火并且准备大量飞刀XDD 05/24 02:15
18F:推 ParseeM:(笑倒地 05/24 03:23
19F:推 boonone:非理工科系看的懂...但是却有莫名的喜感XD 05/24 07:42
20F:推 pairslipper:懂一点但这也太wwww 05/24 07:51
21F:推 martintp6:资工人推 05/24 07:51
22F:推 Frodera:好烦XDDDDDDDDDDDDDDDDDDDDDDDDDDD 05/24 08:03
23F:推 a3602611:推解惑(重点错 05/24 10:07
※ 编辑: kirimaru73 来自: 123.50.53.228 (05/24 11:42)
24F:推 ShadowIVII:举73cm 不对 73bit也太过份了 XDDDD 05/24 11:48
25F:推 LGA2011:资工人推+1 05/24 14:37
26F:推 roycsw:没上过计组,不过完全可以理解XDDDDDD 05/24 17:43
27F:推 Anauma:资工推XD" 05/24 19:12
28F:推 elfswordsman:太神了XD 05/24 23:01
29F:推 iamnotgm:推FFT 05/25 03:10
30F:推 komani131990:73+7!!! 73+7!!! 73+7!!! 73+7!!! 73+7!!! 73+7!!! 05/25 17:03
31F:推 newest:我已经相信你了XDDDDDDDDDDDDD 73还是比某72大啦 05/27 11:12
32F:推 YakumoRan:下次用阿空来讲解核能系统... 05/27 12:27
33F:推 soem:资工人推...XD 06/01 17:47
34F:推 chuegou: 朝圣一下 这里是哪里阿... 09/03 11:23