PHP에서는 특정 객체가 실제로 어느 정도의 메모리를 차지하는지 직접 측정하는 전용 함수는 제공되지 않습니다. 하지만 memory_get_usage() 함수를 활용하면 객체 생성 전후의 메모리 사용량을 비교하여 해당 객체가 점유한 메모리 크기를 간접적으로 계산할 수 있습니다.
memory_get_usage()를 이용한 측정 원리
핵심 아이디어는 간단합니다. 클래스의 인스턴스를 생성하기 직전과 직후에 각각 memory_get_usage()를 호출하고, 두 값의 차이를 구하면 됩니다. 아래 예제 코드를 살펴보겠습니다.
class MyBigClass {
var $allocatedSize;
var $allMyOtherStuff;
}
function AllocateMyBigClass() {
$before = memory_get_usage();
$ret = new MyBigClass;
$after = memory_get_usage();
$ret->allocatedSize = ($after - $before);
return $ret;
}위 코드에서 AllocateMyBigClass() 함수는 다음 순서로 동작합니다.
1. 객체 생성 전의 현재 메모리 사용량을 $before 변수에 저장합니다.
2. MyBigClass의 새 인스턴스를 생성합니다.
3. 객체 생성 후의 메모리 사용량을 $after 변수에 저장합니다.
4. 두 값의 차이($after - $before)를 객체 자신의 allocatedSize 속성에 기록합니다.
측정 결과 해석 시 주의사항
이렇게 얻은 값은 객체가 차지하는 메모리 크기를 나타내지만, 그 수치는 실행 환경 설정에 따라 달라질 수 있다는 점에 유의해야 합니다. PHP 버전, 운영체제(32비트/64비트), Zend 엔진의 내부 구조, zval 저장 방식 등에 따라 동일한 객체라도 측정되는 메모리 크기가 달라질 수 있습니다.
또한 더 정밀한 측정이 필요하다면 memory_get_usage(true)를 호출하여 실제로 할당된 메모리 블록까지 포함한 값을 확인하거나, 여러 번 반복 측정하여 평균값을 구하는 방법도 고려해 볼 수 있습니다.