메모리의 여러 영역으로 나누어짐
1, 스택 영역 (스택) - 프로그램 실행 시 컴파일러에 의해 자동으로 할당되며, 함수 매개변수 값, 지역 변수 값 등이 저장됩니다. 그 동작은 데이터 구조의 스택과 유사합니다. 프로그램이 끝나면 컴파일러에 의해 자동으로 해제됩니다. (추천 학습: PHP 비디오 튜토리얼)
2, 힙 영역(힙) - 메모리에 또 다른 저장 영역을 엽니다. 일반적으로 프로그래머가 할당하고 해제하지만, 프로그래머가 해제하지 않으면 프로그램 종료 시 OS에 의해 재활용될 수 있습니다. 참고로 힙과는 데이터구조가 다릅니다. 할당방식이 연결리스트와 비슷하네요 ㅎㅎ. malloc, calloc, realloc 등 메모리를 할당하는 함수는 힙에 메모리를 할당합니다.
전역변수와 정적변수는 함께 저장됩니다. C 언어의 경우 초기화된 전역 변수와 정적 변수가 한 영역에 있고, 초기화되지 않은 전역 변수와 초기화되지 않은 정적 변수가 또 다른 인접한 영역에 있습니다. C++에는 그러한 차이가 없습니다. 프로그램이 끝난 후 시스템에 의해 해제됩니다.4, Literal 상수 영역 - 상수 문자열이 여기에 배치됩니다.
프로그램 종료 후 시스템에 의해 해제됨5, 프로그램 코드 영역 - 함수 본문의 바이너리 코드가 저장됩니다.
C 언어로 프로그래밍할 때는 개발자가 메모리를 수동으로 관리해야 합니다.
PHP는 웹서버 모듈로 자주 사용되기 때문에 메모리 관리는 메모리 누수 방지와 밀접한 관련이 있습니다.또한 PHP가 스레드 환경에서 사용될 수 있다는 점에 유의하세요. 이는 전역 변수가 경쟁 조건을 일으킬 수 있음을 의미합니다. 스레드 내의 전역 데이터 처리에 대한 자세한 내용은 스레드 격리 기능으로서의 스레드 안전 리소스 관리자를 참조하세요.
또한 Zend 엔진은 매우 특별한 사용 패턴에 직면해야 합니다. 상대적으로 짧은 시간 내에 많은 zval 구조 크기의 메모리 블록과 기타 작은 메모리 블록이 적용되었다가 해제됩니다. PHP의 메모리 관리는 memory_limit(메모리 제한)에도 큰 중요성을 부여합니다.참고:
C 표준 라이브러리와 유사한 부분과 달리 요청한 메모리 할당에 오류가 있는 경우 Zend 엔진의 메모리 관리 기능은 NULL을 반환하지 않습니다. 하지만 현재 요청을 중단하고 중단합니다.위에서 언급했듯이 메모리 누수를 방지하고 가능한 한 빨리 모든 메모리를 해제하는 것은 메모리 관리의 중요한 부분입니다. 보안상의 이유로 Zend 엔진은 요청이 끝날 때 위에서 언급한 API에 의해 할당된 모든 메모리를 해제합니다. --enable-debug 구성 옵션을 사용하여 PHP를 빌드하면 경고가 생성됩니다.
PHP 누출 경고
ZEND_FUNCTION(leak) { long leakbytes = 3; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &leakbytes) == FAILURE) { return; } emalloc(leakbytes); }
위 내용은 PHP 메모리의 여러 영역의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!