첫 번째 단계는 점근 적 메모리 사용량을 계산하는 방법을 파악하는 것입니다. 즉, 문제가 커지면 메모리가 얼마나 커지는지를 알 수 있습니다. 이것은 하나의 재귀가 X 바이트 (X = 상수, 가장 쉬운 것은 1로 설정 됨)를 사용한다고 말함으로써 이루어집니다. 그런 다음 함수가 자신을 호출하는 방식이나 루프가 증가하는 양을 결론 짓는 등 반복을 적어 두십시오. (문제 크기, 선형 또는 그 이하로 이차 함수입니까?)
이것은 대학에서 기초 컴퓨터 과학 수업은 알고리즘이 얼마나 효과적인지 결론을 내릴 때 정말 유용합니다. 정확한 방법은 간단한 포럼 게시물에서 설명하기가 어렵 기 때문에 알고리즘에 관한 책을 가져 오는 것이 좋습니다 (Cormen, Leiserson, Rivest 및 Stein-MIT Press의 "Introduction to Algorithms"을 권합니다).
하지만이 유형의 작업에 대한 단서가없는 경우 get_memory_usage를 사용하고 루프/재귀에서 사용중인 메모리의 양을 반향하여 시작하십시오. 이것은 당신에게 문제가 있다는 암시를 줄 수 있습니다. 기억에 남는 물건의 양을 줄이십시오. 필요없는 모든 것을 버리십시오 (예를 들어 중간 값으로 낮추면 거대한 데이터 배열을 구축하지 마십시오).
분명히, 당신은 스크립트가 사용할 수있는 모든 128meg를 빨아 올리고 있습니다. 이 많은 데이터를 메모리에 저장해야하는 이유는 무엇입니까? 이 문제를 해결할 수있는 유일한 방법은 알고리즘의 저장소 요구 사항을 줄이거 나 메모리 제한을 높이는 것입니다. 당신이하고있는 일에 대한 세부 사항이 없이는 차고에 가서 "내 차가 고장났다. 고쳐라."라고 말하면서 어떻게 고장 났는지 말하는 것과 같다. –
어떻게하면 128M을 늘릴 수 있습니까? 저는 조합 알고리즘, 특히 Chase 알고리즘 - http://www.netlib.no/netlib/toms/382를 사용하고 있습니다. nCk의 경우 n = 12 및 k = 3 인 경우 스크립트가 너무 많은 메모리를 사용합니다. –
'ini_set ('memory_limit', NEW_VALUE)'입니다. new_value를 -1로 설정하면 제한이 제거되고, 그렇지 않으면 바이트로 제한됩니다. –