Exposing Information Through MINFO
Memory
void *emalloc(size_t size); void *safe_emalloc(size_t nmemb, size_t size, size_t offset); void *ecalloc(size_t nmemb, size_t siz); void *erealloc(void *ptr, size_t size, int allow_failure); void *pemalloc(size_t size, int persistent); void *safe_pemalloc(size_t nmemb, size_t size, size_t offset, int persistent); vpod *pecalloc(size_t nmemb, size_t siz, int persistent); void *perealloc(void *ptr, size_t size, int allow_failure);
Allocates memory of size or ((nmemb*size)+offset) as appropriate. The meaning of these functions generally map to their ANSI-C equivalents. Any p* variant will conditionally allocate persistent memory. If the persistent flag is set to 0, or the non p* family of allocators is used, any memory allocated will be automatically freed at the end of a request.
Argument |
Purpose |
---|---|
ptr |
Already allocated pointer to be reallocated to a new size. |
size |
Number of bytes to allocate. |
nmemb |
Used with calloc and the safe_* family of allocators. Multiplied by size to allocate multiple contiguous blocks of equal size. |
offset |
Added to size*nmemb calculation to allocate additional "odd" bytes. |
allow_failure |
Ordinarily a failure in the underlying realloc() function will cause erealloc() to force the engine into bailout mode and end any running script. Setting this flag will allow a erealloc to fail quietly, returning NULL. |
persistent |
When set, the normal system allocation functions will be used rather than the per-request allocators. |
char *estrdup(const char *s); char *estrndup(const char *s, unsigned int length); char *pestrdup(const char *s, persistent); char *zend_strndup(const char *s, unsigned int length);
Duplicates a string of data ending with (but including) the first NULL byte or at length number of characters. Unlike most memory-related functions, the persistent version of estrndup() is named zend_strndup() and does not have a flag to interactively disable persistency.
Argument |
Purpose |
---|---|
s |
String to duplicate. |
length |
Length of data to be duplicated, if known. |
persistent |
When set, the normal system allocation functions will be used rather than the per-request allocators. |
void efree(void *ptr); void pefree(void *ptr, int persistent);
Frees a previously allocated block of memory. If that memory was allocated persistently, it must be freed the same way and vice versa. Using a persistent free on a non-persistent block of memory or the other way around will lead to corruption and a likely segfault.
int zend_set_memory_limit(unsigned int memory_limit);
Alters the php.ini specified memory limit. If memory limits aren't actually enabled, this function will return FAILURE.