PHP'nin substr ne kadar etkili?

3 Cevap php

Ben geniş bellek dizeleri işlemek gerekir PHP bir ayrıştırıcı yazıyorum, yani bu biraz önemli bir konudur. (Yani, "erken optimize" Lütfen beni alev etmeyiniz)

Nasıl substr function çalışır? Bellekte dize verilerin ikinci bir kopyasını yapmak mı, yoksa orijinal başvuru nedir? Ben bir döngüde $str = substr($str, 1);, örneğin, çağrı dert?

3 Cevap

Çad'ın Yorum ilerletmek için, kodunuz (Çad belirtilen atama nedeniyle değil gerçi) aynı anda bellekte olması hem dizeleri (tam biri ve tam bir eksi-ilk-karakteri) gerektirecektir. Bkz:

$string = str_repeat('x', 1048576);
printf("MEM:  %d\nPEAK: %d\n", memory_get_usage(), memory_get_peak_usage());

substr($string, 1);
printf("MEM:  %d\nPEAK: %d  :-(\n", memory_get_usage(), memory_get_peak_usage());

$string = substr($string, 1);
printf("MEM:  %d\nPEAK: %d  :-(\n", memory_get_usage(), memory_get_peak_usage());

Çıkışlar gibi bir şey (hafıza değerleri bayt vardır):

MEM:  1093256
PEAK: 1093488
MEM:  1093280
PEAK: 2142116  :-(
MEM:  1093276
PEAK: 2142116  :-(

Evet, dize yeni kopyalarını her tekrarında oluşturulur olacak gibi bir döngü içinde herhangi bir dize manipülasyon yaparken dikkatli olmalıdır.