锟斤拷 C 锟斤拷锟皆憋拷锟绞憋拷锟斤拷锟斤拷锟斤拷锟揭拷止锟斤拷亟锟斤拷锟斤拷诖锟斤拷锟斤拷锟斤拷为 PHP 锟斤拷锟斤拷锟斤拷锟斤拷 Web 锟斤拷锟斤拷锟斤拷锟斤拷模锟介,锟节达拷锟斤拷锟斤拷锟皆わ拷锟斤拷诖锟叫孤╋拷锟斤拷芄锟斤拷锟斤拷锟斤拷锟斤拷锟揭拷锟� PHP 锟斤拷锟斤拷锟斤拷锟斤拷锟竭程伙拷锟斤拷锟叫o拷锟斤拷锟斤拷味锟斤拷全锟街憋拷锟斤拷锟斤拷锟杰碉拷锟铰撅拷锟斤拷状锟斤拷锟斤拷锟叫癸拷锟竭筹拷锟斤拷全锟斤拷锟斤拷锟捷达拷锟斤拷锟斤拷锟较拷锟轿硷拷锟斤拷为锟竭程革拷锟斤拷锟斤拷施锟斤拷 锟竭程帮拷全锟斤拷锟斤拷源锟斤拷锟斤拷锟斤拷锟斤拷
锟斤拷锟解,Zend 锟斤拷锟斤拷要锟斤拷锟揭伙拷锟绞拷锟斤拷锟斤拷锟斤拷使锟斤拷模式锟斤拷锟斤拷一锟轿比较短碉拷时锟斤拷锟节o拷锟斤拷锟� zval 锟结构锟斤拷小锟斤拷锟节达拷锟斤拷锟斤拷锟斤拷锟斤拷小锟节达拷楸伙拷锟斤拷锟斤拷锟斤拷俦锟斤拷头拧锟絇HP 锟斤拷锟节达拷锟斤拷锟揭诧拷锟斤拷锟斤拷锟� memory_limit(锟节达拷锟斤拷锟斤拷)锟斤拷
为锟斤拷锟斤拷锟斤拷锟斤拷锟较碉拷锟斤拷锟斤拷Zend 锟斤拷锟斤拷锟结供为锟剿达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷峁╋拷锟揭伙拷锟斤拷锟斤拷锟斤拷锟节达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷指只锟斤拷要锟斤拷锟斤拷锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷倩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷时锟酵放碉拷锟斤拷锟捷★拷锟斤拷展锟斤拷锟斤拷锟斤拷锟斤拷要锟接达拷锟铰憋拷锟斤拷锟叫筹拷锟侥癸拷锟斤拷锟斤拷锟斤拷然一些锟斤拷锟结供锟侥憋拷莨锟斤拷锟斤拷锟斤拷煤锟绞碉拷值模锟斤拷锟斤拷诒锟斤拷锟斤拷谢锟斤拷锟斤拷锟揭伙拷锟斤拷源锟斤拷锟�
原锟斤拷 | 说锟斤拷 |
---|---|
void *emalloc(size_t size) |
锟斤拷锟斤拷 size 锟街节碉拷锟节存。 |
void *ecalloc(size_t nmemb, size_t size) |
锟斤拷 nmemb 元锟截凤拷锟斤拷 size 锟街节的伙拷锟斤拷锟斤拷锟斤拷锟斤拷始锟斤拷为锟姐。
|
void *erealloc(void *ptr, size_t size) |
锟睫革拷使锟斤拷 emalloc 锟斤拷锟斤拷幕锟斤拷锟斤拷锟� ptr 锟侥达拷小为
size 锟街节★拷
|
void efree(void *ptr) |
锟酵凤拷 ptr 指锟斤拷幕锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟� emalloc
锟斤拷锟斤拷摹锟�
|
void *safe_emalloc(size_t nmemb, size_t size, size_t offset)
|
锟斤拷锟戒缓锟斤拷锟斤拷锟斤拷锟斤拷锟矫匡拷锟斤拷小为 size 锟街节碉拷 nmemb
锟介,锟斤拷锟斤拷锟斤拷 offset 锟街节★拷锟斤拷锟斤拷锟斤拷
emalloc(nmemb * size + offset) 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟解保锟斤拷锟斤拷
|
char *estrdup(const char *s) |
锟斤拷锟斤拷一锟斤拷锟缴达拷锟� NULL 锟斤拷尾锟斤拷锟街凤拷锟斤拷 s 锟侥伙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
s 锟斤拷锟狡碉拷锟斤拷锟斤拷锟斤拷锟节★拷
|
char *estrndup(const char *s, unsigned int length)
|
锟斤拷锟斤拷锟斤拷 estrdup 锟斤拷锟斤拷 NULL 锟斤拷尾锟斤拷锟街凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷知锟侥★拷
|
Note: 锟斤拷锟斤拷 C 锟斤拷准锟斤拷锟斤拷锟狡的诧拷锟街诧拷同锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节达拷锟斤拷锟絑end 锟斤拷锟斤拷锟斤拷诖锟斤拷锟斤拷锟斤拷锟斤拷锟结返锟斤拷 NULL 值锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷止锟斤拷前锟斤拷锟斤拷
锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷止锟斤拷锟节达拷泄漏锟斤拷锟斤拷锟斤拷锟杰匡拷锟斤拷头锟斤拷锟斤拷锟斤拷诖锟斤拷锟斤拷诖锟斤拷锟斤拷锟斤拷锟揭拷锟缴诧拷锟街★拷锟斤拷为锟斤拷全原锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟绞憋拷锟�
Zend 锟斤拷锟斤拷锟斤拷头锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷岬斤拷锟� API 锟斤拷锟斤拷锟斤拷锟斤拷诖妗o拷锟斤拷 PHP
使锟斤拷 --enable-debug
锟斤拷锟斤拷选锟斤拷锟斤拷泄锟斤拷锟斤拷锟斤拷饨拷锟斤拷锟揭伙拷锟斤拷锟斤拷妗�
Example #1 PHP 锟斤拷泄漏锟斤拷锟斤拷
ZEND_FUNCTION(leak) { long leakbytes = 3; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &leakbytes) == FAILURE) { return; } emalloc(leakbytes); }
锟斤拷锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷锟斤拷冢锟�
[Thu Oct 22 02:14:57 2009] Script: '-' /home/johannes/src/PHP_5_3/Zend/zend_builtin_functions.c(1377) : Freeing 0x088888D4 (3 bytes), script=- === Total 1 memory leaks detected ===
Note: 锟斤拷使锟斤拷 PHP 锟斤拷锟斤拷时锟斤拷锟斤拷要确锟较憋拷锟斤拷锟斤拷锟节达拷要使锟斤拷 emalloc 锟斤拷锟斤拷锟戒,锟斤拷注锟斤拷锟斤拷锟矫硷拷锟斤拷锟斤拷锟斤拷锟较革拷锟斤拷锟介看 锟斤拷锟斤拷锟斤拷使锟斤拷锟斤拷
Note: 锟节达拷泄漏锟斤拷锟斤拷锟斤拷锟皆凤拷锟斤拷锟斤拷 emalloc 锟斤拷锟斤拷锟节达拷榈硷拷碌锟叫孤╋拷锟轿拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟绞癸拷锟斤拷诖锟斤拷锟斤拷锟斤拷锟斤拷锟� valgrind 锟斤拷 libumem 锟饺★拷要锟津化此凤拷锟斤拷锟斤拷锟斤拷锟斤拷 PHP 锟斤拷锟斤拷时通锟斤拷锟斤拷锟矫伙拷锟斤拷锟斤拷锟斤拷 USE_ZEND_ALLOC=0 锟斤拷锟斤拷锟斤拷 PHP 锟斤拷锟节达拷锟斤拷锟斤拷锟斤拷锟�