저는 개인 프로젝트로 몇 가지 PHP 확장을 작성하고 있습니다. (저는 전문적으로 몇 년 전에 실시간 및 프로세스 제어 어플리케이션을 개발하기 위해 C를 사용했기 때문에 항상 메모리 할당 자 반환을 검사하고 오류 경로가 메모리를 누설하지 않도록 약간 편집증에 빠졌습니다. 그런 다음 C++ 및 . 예외 핸들러는) 지금은 간단한 질문이 있습니다emalloc에 대한 테스트 상태를 반환합니다
해야합니까 또는 나는 buf
이후에 NULL 검사를 수행 할 필요가 없습니다하십시오 FLOSS 프로젝트에 일반적으로
buf = emalloc(rec->len);
, 난 그냥 사용합니다 이런 종류의 Q에 대답하기위한 템플릿으로서의 기존 소스. 그러나 PHP 확장은 일관성이 없습니다. 복잡한 C 사전 처리 된 코드를 정적으로 분석하는 것은 비현실적이며, 필자는 자체 LAMP 스택을 쉽게 테스트 할 수 있습니다. 기본적으로 emalloc 코드에서 힙 피로에 대한 zend 오류 루틴을 호출하지만 코드는 계속 0을 반환합니다. 일부 확장 코드의 경우 NULL 반환을 확인하지만 PHPAPI void php_basename()
과 같은 예제도 ext/standard/string.c
과 같이 찾을 수 있습니다.
emalloc가 zend 예외를 throw하는 대신 반환하는 경우 하드 메모리 예외를 생성합니다.
공식 PHP 개발자의 답변을 아는 분이라면 누구든지이 점에 대해 감사드립니다. 감사.
그 'emalloc' 함수에 대한 문서는 이것에 대해 무엇을 말합니까? – Mat
많은 수의 메모리를 할당하여 이러한 상황을 만들 수 있습니다 :'emalloc (99999999999)'(필요한 경우 9 초 추가). – Lekensteyn
@Mat, 나는 ** unwind **가 지적한 한 문장을 놓쳤다. FLOSS 프로젝트에 대한 저의 경험 (필자는 4 점에만 기여했습니다)은 그러한 문서가 최소한이거나 존재하지 않는다는 것입니다. 개발자는 신경 쓸 필요가 없으며 코드 검사에서이를 다시 조작해야합니다. 기본 MM 시스템 전체를 다루는 [한 페이지] (http://php.net/manual/en/internals2.memory.management.php)는 평균보다 낫습니다. – TerryE