php扩展开发学习笔记 6

内存管理

  在C语言里,分配内存有一组alloc函数,比如malloc、calloc、realloc。php为了更方便,更安全地管理内存,自己提供了一组内存分配的函数:emalloc、ecalloc、erealloc,此外还有estrdup用于拷贝内存,efree用于释放由前面那些函数分配的内存。他们的用法和标准C函数的一样。这组e开头的函数分配的内存空间只存在于一次请求。在请求结束后,php会自动释放掉。这就减少了由于没有释放掉内存而造成的内存泄露的可能。

  如果需要分配的内存在整个进程运行时都保持,而不是在请求处理结束后自动释放,则还有一组pe开头的函数,如pemalloc、pecalloc等。这组函数比标准C函数的多一个参数,即分配的内存是否持久,当这个参数为1时,即表示分配的是持久的内存,不会随着请求结束而自动释放。如:pemalloc(sizeof(long) * 100, 1);。

  此外,为了方便使用,还提供了safe_emalloc和safe_pemalloc这两个函数。 safe_emalloc的原型如下:void *safe_emalloc(size_t size, size_t count, size_t addtl);。参数分别表示单元的大小,单元的个数,以及偏移。实际分配的空间大小就是size * count + addtl。safe_pemalloc与之类似。这两个函数还有一个作用就是避免手工做上面的计算时,可能造成整数溢出,而导致分配的内存大小小于预期或者是个负数。

 

3 thoughts on “php扩展开发学习笔记 6

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.