�� C ���Ա��ʱ��������Ҫ�ֹ��ؽ����ڴ������Ϊ PHP �������� Web ��������ģ�飬�ڴ������Ԥ���ڴ�й©���ܹ���������Ҫ֪�� PHP ���������̻߳����У�����ζ��ȫ�ֱ������ܵ��¾���״�����й��߳���ȫ�����ݴ������Ϣ��μ���Ϊ�̸߳�����ʩ�� �̰߳�ȫ����Դ��������
���⣬Zend ����Ҫ���һ��ʮ�������ʹ��ģʽ����һ�αȽ϶̵�ʱ���ڣ���� zval �ṹ��С���ڴ���������С�ڴ�鱻�������ٱ��ͷš�PHP ���ڴ����Ҳ������ 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 �������ƵIJ��ֲ�ͬ���������������ڴ����Zend ������ڴ���������᷵�� NULL ֵ��������������ֹ��ǰ����
������������ֹ���ڴ�й©�������ܿ���ͷ������ڴ����ڴ�������Ҫ��ɲ��֡���Ϊ��ȫԭ�����������ʱ��
Zend ������ͷ������������ᵽ�� API ��������ڴ档��� 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 ���ڴ��������