zil*_*n01 7 php optimization memory-management substr
我正在用PHP编写一个解析器,它必须能够处理大型内存中的字符串,所以这是一个有点重要的问题.(请不要"过早优化"火焰我,请)
该substr功能如何运作?它是否在内存中生成字符串数据的第二个副本,还是引用原始数据?我应该担心,例如,$str = substr($str, 1);在循环中调用吗?
为了进一步补充 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)