<?php
var_dump( memory_get_usage() ); // int(129100)
var_dump( memory_get_usage() ); // int(129156) - 很难理解,这里为什么会有内存增加?
var_dump( memory_get_usage() ); // int(129156)
define('hello', 'WORLD');
var_dump( memory_get_usage() ); // int(129156) - 既然创建了一个常量,就该有内存增加。
$hello = 'WORLD';
var_dump( memory_get_usage() ); // int(129304)
var_dump( memory_get_usage() ); // int(129100)
var_dump( memory_get_usage() ); // int(129156) - 很难理解,这里为什么会有内存增加?
var_dump( memory_get_usage() ); // int(129156)
define('hello', 'WORLD');
var_dump( memory_get_usage() ); // int(129156) - 既然创建了一个常量,就该有内存增加。
$hello = 'WORLD';
var_dump( memory_get_usage() ); // int(129304)
http://www.laruence.com/2011/03/04/1894.htmlphp和C那样的底层语言是不一样的,它本身更象一个小系统
int 335160
int 335160
int 335176
int 335280
确实是高人呐
int(51312)
int(51424)
int(51424)
int(51480)
int(51480)我觉得讨论单条语句所花的内存没有意义。内存的分配实际上都是分段的,也就是即使你需要1个字节的内存,实际分配有可能是32个字节或者1024个字节,取决于分配策略,因为这样就不需要每次使用每次分配,一个变量所花的内存一般按照一个字母一个字节近似计算一下即可,很难精确计算。另外var_dump这个函数本身会输出字符串,这个字符串是不是也需要内存,这取决于内部实现。为什么有的时候运行会增加内存有的时候内存不变,那就是因为前次分配多出来的内存是否够用的问题,如果够用就不需要增加,如果不够用就要增加。
int(314848)
int(314848)
int(314864)
int(314968)
我也测了一下,
$a=11;
var_dump($a);
var_dump( memory_get_usage() );//int(314104)
var_dump( memory_get_usage() );//int(314104)
var_dump( memory_get_usage() );//int(314104)
注释掉$a输出,可知第一处内存变化是var_dump造成的,而不是memory_get_usage()关于define我定义值为字符串,内存不变,定义为串结果就变
估计int型是共享内存,放在了常量区,但是字符串需要创建,见下面
define("hello",123123);//不变
define("hello","AAAAAAA");//不变
或
define("hello","AAAAAAA");//变
define("hello","AAAAAAABBB");//不变,像是存常量区一个指针(&地址)可能也存在不同机器不同版本不同的结果,以上看到了三四种结果了