一、順序存儲(chǔ)有比較多外部碎片的原因
順序存儲(chǔ)是一種數(shù)據(jù)存儲(chǔ)方式,它是將數(shù)據(jù)依次存儲(chǔ)在一片連續(xù)的內(nèi)存空間中,每個(gè)數(shù)據(jù)元素占用固定的空間大小。相比于鏈?zhǔn)酱鎯?chǔ),順序存儲(chǔ)具有存儲(chǔ)和訪問(wèn)效率高的優(yōu)點(diǎn),但是也存在一些問(wèn)題,其中之一就是外部碎片比較多。
外部碎片指的是分散在內(nèi)存中的小塊未被利用的空間,這些空間無(wú)法被分配給需要存儲(chǔ)的數(shù)據(jù),從而造成內(nèi)存空間的浪費(fèi)。在順序存儲(chǔ)中,當(dāng)需要存儲(chǔ)的數(shù)據(jù)元素大小不同時(shí),容易出現(xiàn)外部碎片問(wèn)題。以下是造成順序存儲(chǔ)有比較多外部碎片的原因:
1、數(shù)據(jù)元素大小不一
在順序存儲(chǔ)中,數(shù)據(jù)元素的大小必須是固定的,如果不同的數(shù)據(jù)元素大小不同,就會(huì)產(chǎn)生浪費(fèi)空間的現(xiàn)象。比如,如果需要存儲(chǔ)兩個(gè)數(shù)據(jù)元素,一個(gè)占用1個(gè)字節(jié),一個(gè)占用10個(gè)字節(jié),那么存儲(chǔ)這兩個(gè)元素時(shí)就會(huì)產(chǎn)生外部碎片。
2、內(nèi)存分配和釋放不合理
在順序存儲(chǔ)中,當(dāng)一個(gè)數(shù)據(jù)元素被刪除時(shí),它所占據(jù)的空間就變成了未分配的內(nèi)存空間,這些空間可能太小,不能被下一個(gè)需要存儲(chǔ)的數(shù)據(jù)元素使用,從而產(chǎn)生外部碎片。如果內(nèi)存分配和釋放不合理,就會(huì)導(dǎo)致順序存儲(chǔ)中外部碎片的增加。
3、數(shù)據(jù)元素的插入和刪除
在順序存儲(chǔ)中,如果需要插入或刪除一個(gè)數(shù)據(jù)元素,就需要移動(dòng)其他數(shù)據(jù)元素的位置,從而留出空間。這個(gè)操作會(huì)使得已有的數(shù)據(jù)元素重新排列,容易產(chǎn)生外部碎片。而且,如果插入或刪除的數(shù)據(jù)元素比較多,就會(huì)導(dǎo)致大量的數(shù)據(jù)元素的移動(dòng),從而降低了存儲(chǔ)和訪問(wèn)的效率。