这个看情况了,处理大数据肯定需要的内存更大,只是本地调试肯定用不了多少.
一般作为一台专门运行php的服务器,肯定要尽可能的把内存给于php运行,一台不够就追加.
我们在前面的php高效写法提到,尽量不要复制变量,特别是数组.一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G.下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数占用的内存:
[php] view plain copy print?
php
echo memory_get_usage() , 'br';
$start = memory_get_usage();
$a = Array();
for ($i=0; $i1000; $i◆◆) {
$a[$i] = $i ◆ $i;
}
$mid = memory_get_usage();
$end = memory_get_usage();
echo 'argv:', ($mid - $start)/1000 ,'bytes' , 'br';echo 'argv:',($end - $mid)/1000 ,'bytes' , 'br';输出是:
大概了解1000
$a = array_fill(0, 10000, 1);
$mid = memory_get_usage(); //10k elements array;echo 'argv:', ($mid - $start )/10000,'byte' , 'br';$b = array_fill(0, 10000, 1);
$end = memory_get_usage(); //10k elements array;echo 'argv:', ($end - $mid)/10000 ,'byte' , 'br';得到:
[cpp] view plain copy print?
#include "stdafx.h"
//#include stdio.h
int main() {
printf("int:%d\nlong:%d\ndouble:%d\nchar*:%d\nsize_t:%d\n",sizeof(int), sizeof(long),
sizeof(double), sizeof(char *),
sizeof(size_t));
return 0;
在PHP中都使用long类型来代表数字,没有使用int类型大家都明白PHP是一种弱类型的语言,它不会去区分变量的类型,没有int float char *之类的概念.
我们看看php在zend里面存储的变量,PHP中每个变量都有对应的 zval, Zval结构体定义在Zend/zend.h里面,其结构:
typedef struct _zval_struct zval;
struct _zval_struct {
/* Variable information */
PHP使用一种UNION结构来存储变量的值,即zvalue_value 是一个union,UNION变量所占用的内存是由最大成员数据空间决定.
typedef union _zvalue_value {
long lval; /* long value */double dval; /* double value */struct { /* string value */char *val;
int len;
} str;
HashTable *ht; /* hash table value */zend_object_value obj; /*object value */} zvalue_value;
HashTable结构体定义在Zend/zend_hash.h.
typedef struct _hashtable {
zend_bool persistent;//1
unsigned char nApplyCount;//1
zend_bool bApplyProtection;//1
#if ZEND_DEBUG
#endif
} HashTable;
typedef struct bucket {
Bucket
共享文件,按功能分大类,好维护,好修改!
php内存占用过多主要是程序问题,比如把大数组,大数据读入进行处理!
vps?
我们这前面的php高效写法提到,尽量不要复制变量,特别是数组,一般来说php数组的内存利用率只有1/10,也就是说,一个在c语言国面100M内存的数组,在php里面就是1G,
可以使用memory_get_usage函数,下面是一个小例子, 楼主自己发挥一下
php?
echo?memory_get_usage()?,?'br';?
$start?=?memory_get_usage();?
$a?=?Array();?
for?($i=0;?$i1000;?$i◆◆)?{?
$a[$i]?=?$i?◆?$i;?
}?
$mid?=?memory_get_usage();?
$end?=?memory_get_usage();?
以上就是土嘎嘎小编为大家整理的php数组占用内存大小是多少相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!