> 백엔드 개발 > PHP 튜토리얼 > PHP 커널 메모리 관리

PHP 커널 메모리 관리

WBOY
풀어 주다: 2016-07-29 09:05:47
원래의
916명이 탐색했습니다.

1. 메모리 관리의 기본

C 언어로 개발할 때는 개발자가 직접 메모리를 관리해야 합니다. PHP는 웹 서버의 모듈로 사용되는 경우가 많으며, 메모리 관리는 메모리 누수 방지와 밀접한 관련이 있습니다. 또한 PHP는 스레드 환경에서 사용될 수 있으므로 전역 변수가 경쟁 조건을 유발할 수 있습니다. 또한 Zend 엔진은 매우 특별한 사용 패턴에 직면합니다. 비교적 짧은 시간 내에 많은 zval 구조 크기의 메모리 블록과 기타 작은 메모리 블록이 적용되고 해제됩니다. PHP의 메모리 관리도 memory_limit에 큰 중요성을 부여합니다. memory_limit). 제한 사항)

위 요구 사항을 충족하기 위해 Zend 엔진은 요청 관련 데이터를 처리하기 위한 특수 메모리 관리자를 제공합니다. 요청 관련 데이터는 단일 요청만 처리하면 되며 늦어도 요청이 끝나면 공개되는 데이터를 말합니다. 확장 개발자는 기본적으로 아래 표에 나열된 규칙에 노출됩니다. 제공된 편의 기능 중 일부는 매크로를 사용하여 구현되지만 이 기사에서는 기능처럼 취급됩니다.

위에서 언급했듯이 메모리 누수를 방지하고 가능한 한 빨리 모든 메모리를 해제하는 것은 메모리 관리에 있어서 중요한 부분입니다. 보안상의 이유로 Zend 엔진은 요청이 끝날 때 위에서 언급한 API에 의해 할당된 모든 메모리를 해제합니다. --enable-debug 구성 옵션으로 PHP를 빌드하면 경고가 발생합니다.

PHP 변수를 사용할 때 emalloc을 사용하여 변수의 메모리가 할당되었는지 확인하고 주의해야 합니다. 참조 횟수.

메모리 누수 감지는 emalloc에 ​​할당된 메모리 블록으로 인해 발생한 누수만 찾을 수 있습니다. 심층적인 분석을 위해서는 valgrind, libumem 등의 메모리 탐지기를 사용하는 것이 좋습니다. 이 분석을 단순화하려면 PHP가 시작될 때 환경 변수 USE_ZEND_ALLOC=0을 설정하여 PHP의 메모리 관리자를 비활성화하십시오.

(위 내용은 PHP 공식 홈페이지의 중국어 내용입니다)

2. 데이터 지속성

데이터 지속성은 모든 데이터가 현재 요청보다 오래 지속될 것으로 예상된다는 의미입니다. , Zend 엔진이 없습니다. 메모리 관리자는 요청 바인딩 할당에 매우 관심이 있지만 이는 일반적으로 실용적이지 않거나 적절하지 않습니다. 외부 클래스 라이브러리의 요구 사항을 충족하기 위해 영구 메모리가 필요한 경우도 있으며 유용한 "블랙 기술"이기도 합니다.

영구 메모리는 일반적으로 영구 데이터베이스 연결에 사용됩니다. 실제로는 좋지 않지만 여전히 가장 일반적으로 사용되는 기능입니다.

참고: 추가 지속성 매개변수를 취하는 아래의 모든 함수는 false여야 하며, 엔진은 일반 할당자(emalloc)를 사용하고, 메모리는 지속성으로 간주되어서는 안 됩니다(번역되지 않습니다!). 영구 메모리로서 주 메모리 API와 같은 시스템 호출 할당자는 여전히 대부분의 경우 널 포인터를 반환하지 않습니다.

경고: 지속성을 위해 할당된 메모리는 최적이 아니거나 Zend 엔진에 의해 추적되지 않습니다. memory_limit에 의해 제한되지 않습니다. 또한 해커가 만든 모든 변수는 메모리를 유지하는 데 사용되어서는 안 됩니다.

(번역이 정말 엉망이네요!)

위에서는 PHP 커널과 메모리 관리에 대해 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿