PHP字符串偏移量?在执行许多substr时使用变量(如缓冲区)太慢?
我有一个需要PHP解释的缓冲区,但是在缓冲区上使用许多substr被证明是非常缓慢和cpu密集的,可能是因为substr创建了子字符串的新副本 我需要通过以下方式在缓冲区中前进: 移动偏移量为X(可变字节数)。 或 从开头删除X字节 PHP中是否有允许我执行类似操作的容器 示例(伪代码)PHP字符串偏移量?在执行许多substr时使用变量(如缓冲区)太慢?,php,pointers,substr,Php,Pointers,Substr,我有一个需要PHP解释的缓冲区,但是在缓冲区上使用许多substr被证明是非常缓慢和cpu密集的,可能是因为substr创建了子字符串的新副本 我需要通过以下方式在缓冲区中前进: 移动偏移量为X(可变字节数)。 或 从开头删除X字节 PHP中是否有允许我执行类似操作的容器 示例(伪代码) 谢谢在字节级别工作并不是创建PHP的目的。PHP如何管理内存比您想象的要复杂得多。它使用了大量的参考资料,即使您不使用&也很少复制 我非常怀疑执行许多substr的速度会很慢,我也非常怀疑用PHP在字节级管理内
谢谢在字节级别工作并不是创建PHP的目的。PHP如何管理内存比您想象的要复杂得多。它使用了大量的参考资料,即使您不使用
&
也很少复制
我非常怀疑执行许多
substr
的速度会很慢,我也非常怀疑用PHP在字节级管理内存会有什么帮助。而(!done)
给出语法错误。@Jeffery-andunpack(?
也是无效的。我很确定它只是伪代码。是的,这是正确的,我应该指定这只是一个伪代码示例。如果它可以加载到内存中,或者临时文件足够快,您可以尝试使用fread
php://memory或php://temp
streams。不确定是否更快,但麦汁尝试一下。我会研究这个建议,我也考虑过数组,但发现:PHP使用哈希表来实现数组,也就是说,为了访问数组中的元素,它必须计算一个哈希并遍历一个链表,最坏的情况下,我可以从PHP调用C代码,但我将把它作为最后的手段。我们在代码和substr的速度确实非常慢,下面是另一个有类似问题的人:
while( !done )
{
$itemSize = unpack( ?, $buffer );
$item = substr($buffer, $itemSize );
$done = doSomething( $item );
$buffer = $item;
}