PHP代码内存不足分配问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP代码内存不足分配问题相关的知识,希望对你有一定的参考价值。
存在一种技术,通过该技术可以从(N)位代码生成(N + 1)个比特代码的列表。
- 以给定顺序获取N位代码列表并将其称为List-N
- 反转上面的列表(List-N),并命名新的反射列表:Reflected-List-N
- 使用0作为原始列表(List-N)的每个成员的前缀,并将此新列表称为“A”
- 使用1作为新列表(Reflected-List-N)的每个成员的前缀并调用此新列表“B”
- 具有N + 1位的代码列表是列表A和B的串联。
演示上述步骤:从2位神秘码生成3位神秘码列表
- 2位代码列表:00,01,11,10
- 反向/反映以上列表:10,11,01,00
- 前缀旧条目0:000,001,011,010
- 带有1:110,111,101,100的前缀反射列表
- 连接在最后两个步骤中获得的列表:000,001,011,010,110,111,101,100
但当我输入65作为输入获取错误:
php Fatal error: Out of memory (allocated 538968064) in $result[]=$prefix.$value; line code
::代码::
<?php
function MysteryCodes($input){
$initArr=array(0,1);
$list=array();
$list[0]=$initArr;
for ($i=1; $i<$input; $i++)
{
$prevIndex=$i-1;
$reflectedListN = array_reverse($list[$prevIndex]);
$listA=prefixR($list[$prevIndex], '0');
$listB=prefixR($reflectedListN, '1');
$list[$i]=array_merge($listA, $listB);
}
return array_slice($list[$input-1], -$input);
}
function prefixR($input, $prefix){
$result=array();
foreach($input as $value){
$result[]=$prefix.$value;
}
return $result;
}
$inp = 5;
if($inp>=1 && $inp<=65){
$result=MysteryCodes($inp);
$output="";
foreach($result as $key=>$value)
$output.="$value
";
echo $output;
}
还有任何其他方法可以通过更改相同的代码或逻辑来克服。
提前致谢。
对于$inp = 65
,您得到的数组将包含2^65
不同的二进制值。您将每个值存储为字符串,这不是存储二进制数字的最有效方法。您可以将字符串转换为整数以存储在数组中,然后返回字符串进行计算(反转,前缀) - 但您很快会遇到整数溢出 - 对于大于32位PHP的2^32
和64位的2^64
的值-bit PHP - 请参阅docs - 然后将值转换为float
类型,您将失去精度。
所以你可以将更多的值压缩到内存中,但无论你做什么,你肯定会达到这样的程度,这个数组不适合memory_limit
。
以上是关于PHP代码内存不足分配问题的主要内容,如果未能解决你的问题,请参考以下文章
PHP致命错误:内存不足(分配80740352)(试图分配12352字节)
WordPress PHP致命错误:内存不足(分配2097152)(试图分配4096字节)
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段