一般來(lái)說(shuō),PHP數(shù)組的內(nèi)存利用率只有 1/10, 也就是說(shuō),一個(gè)在C語(yǔ)言里面100M 內(nèi)存的數(shù)組,在PHP里面就要1G。特別是在PHP作為后臺(tái)服務(wù)器的系統(tǒng)中,經(jīng)常會(huì)出現(xiàn)內(nèi)存耗費(fèi)太大的問(wèn)題。
臨滄網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
因?yàn)檫@個(gè)是語(yǔ)言的問(wèn)題,常規(guī)方案比較難以解決。下面是一種通過(guò)string 解決的方案。
復(fù)制代碼 代碼如下:
$total = 100000;
$double = "";
for ($i = 0; $i $total; $i++)
{
$double .= pack("d", $i + 0.1);
}
for ($i = 0; $i $total; $i++)
{
unpack("@" . ($i * 8) . "/d", $double);
}
這個(gè)例子用一個(gè)string 保存一個(gè)double 的數(shù)組。然后在使用的時(shí)候unpack出來(lái)。
當(dāng)然,這會(huì)影響性能。要看具體的需求。
比如這樣的情況下:
你有10個(gè)數(shù)組,每個(gè)數(shù)組10M (1百萬(wàn)數(shù)據(jù)左右),那么十個(gè)要花費(fèi) 100M內(nèi)存。
再加上10個(gè)人并發(fā)的話,內(nèi)存就會(huì)嚴(yán)重不夠了。
然后,在10個(gè)數(shù)組,不是每次都同時(shí)使用的。你可以,把他們保存成string
然后,在使用的時(shí)候,unpack某一個(gè)string變成一個(gè)數(shù)組。
神啊,數(shù)組存那么多數(shù)據(jù)你循環(huán)時(shí)服務(wù)器會(huì)抽風(fēng)的。。。。
數(shù)組用來(lái)存儲(chǔ)一定數(shù)量的數(shù)據(jù),注意是一定數(shù)量。。。。
理論上是可以的,沒(méi)試過(guò)。數(shù)組其實(shí)是在內(nèi)存中的一塊區(qū)域,計(jì)算機(jī)處理內(nèi)存中的數(shù)據(jù)相對(duì)來(lái)講最快的了,具體查找到某個(gè)值的速度取決于你的查找方法了,一般的查找方法是先排序再進(jìn)行排查的。php自帶的array函數(shù)速度就很快的,當(dāng)然這么龐大的數(shù)據(jù)量很占系統(tǒng)資源的。
這里面更引響速度的應(yīng)該是你把數(shù)據(jù)從文件中取出來(lái)的這個(gè)過(guò)程吧。
這個(gè)問(wèn)題 應(yīng)該這么說(shuō):如果定義的是一個(gè)簡(jiǎn)單類型的數(shù)組,例如:int my_int_array[100] ; 那么最多能夠存放:100個(gè)元素,且每個(gè)元素的詳細(xì)大小為:sizeof(int) ;數(shù)組的合法存取下標(biāo)為:my_int_array[0] -- my_int_array[99],如果超過(guò)了這個(gè)范圍,那么就會(huì)產(chǎn)生數(shù)組越界,程序就會(huì)出現(xiàn)錯(cuò)誤了。
如果定義的是一個(gè)復(fù)合類型的數(shù)組,例如:結(jié)構(gòu)數(shù)組。舉例如下:
struct myself_datatype
{
char name[40] ;
int sex ;
int age ;
} myself_data ;
myself_data my_struct_array[100] ;
那么結(jié)構(gòu)數(shù)組中的每一個(gè)元素所占的空間大小就是:sizeof(myself_data.name) + sizeof(myself_data.sex) + sizeof(myself_data.age) 。