2017-03-22 2 views
1

PHP5에서 부동 소수점 숫자가 차지하는 메모리 양을 확인하고 싶습니다. 나는 memory_get_usage()을 매우 신뢰하지 못한다고 읽었습니다.PHP에서 플로트 크기 받기

나는 이것을 사용해 부동 소수점의 크기를 결정했으며, 새로운 부동 소수점 숫자를 만들 때마다 메모리 사용이 168 바이트 씩 증가합니다. 나는 이것이 너무 크다고 생각하여 나의 질문은 - 얼마나 믿을만한가? 부동 소수점 숫자의 크기를 근사하는 더 좋은 방법이 있습니까?

내 서버의 OS는 Ubuntu 14.04입니다.

답변

3

memory_get_usage()는 프로그램의 변수와 이러한 변수의 내부 저장을 저장하기 위해 PHP에서 사용하는 메모리 양을 반환합니다.

memory_get_usage()에서 반환 된 값과 스크립트에서 처리 한 실제 값을 저장하는 데 사용 된 메모리 양 사이에는 직접적인 연결이 없습니다.

PHP 변수에는 유형이 없기 때문에 각 변수는 모든 유형의 값을 저장할 수있는 데이터 구조를 사용합니다. 즉, bool 값의 1 비트 페이로드에 대해서도 PHP는 많은 메모리 (측정 한 168 바이트)를 사용합니다.

배열은 배열, 해시 및 이중 연결 목록의 구조와 기능을 혼합하는 복합 형식이기 때문에 값이 배열의 일부일 때 더 커집니다. 이러한 서로 다른 데이터 구조의 기능을 제공하기 위해 배열 유형은 저장하는 객체간에 링크를 유지하며 이러한 링크는 메모리를 사용합니다.

PHP 7은이 방법을 알고 싶다면, 그것의 데이터가 내부적으로, 평균, 그것은 5

그러나 PHP에서 사용하는 메모리의 약 절반에 사용되는 메모리의 양을 감소 저장하는 방식을 변경 바이트 수는 (가능한 값, FE의 범위를 알 수있는 순서) 실제 부동 소수점 값을 저장하는데 사용되는 상기 정보를 사용할 수있는 documentation page of the float type :

float의 크기가되지만, 플랫폼에 의존 대략 14 자리 10 진수의 정밀도로 ~ 1.8e308의 최대 값은 일반적인 값 (64 비트 IEEE 형식)입니다. 내가 가정

"는 플랫폼 의존"는 32 비트 플랫폼에서 4 바이트 (float위한 전통적인 크기) 및 64 비트에서 8 바이트 큰 플랫폼 (전통적인 double)를 사용하는 것을 의미한다.

+0

고맙습니다. PHP5 전용 라이브러리를 사용하는 것은 부끄러운 일입니다. PHP7을 사용하여 프로세스를 시도했지만 속도가 훨씬 빠릅니다. 불행히도 PHP5를 수용해야합니다. 다시 한 번 감사드립니다! :) – MemoNick