PHP的substr效率如何?

zil*_*n01 7 php optimization memory-management substr

我正在用PHP编写一个解析器,它必须能够处理大型内存中的字符串,所以这是一个有点重要的问题.(请不要"过早优化"火焰我,请)

substr功能如何运作?它是否在内存中生成字符串数据的第二个副本,还是引用原始数据?我应该担心,例如,$str = substr($str, 1);在循环中调用吗?

sal*_*the 3

为了进一步补充 Chad 的评论,您的代码将要求两个字符串(完整的字符串和完整的一减第一个字符)同时位于内存中(尽管不是由于 Chad 所说的分配)。看:

$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());
Run Code Online (Sandbox Code Playgroud)

输出类似(内存值以字节为单位):

MEM:  1093256
PEAK: 1093488
MEM:  1093280
PEAK: 2142116  :-(
MEM:  1093276
PEAK: 2142116  :-(
Run Code Online (Sandbox Code Playgroud)