<?php
echo memory_get_usage();
for($ii=0; $ii<1000; $ii++) {

$c[] = array('A'=>12); }echo("\n");
echo memory_get_usage();
?>输出结果 
---------- run php ----------
58088
294872
输出完成 (耗时 0 秒) - 正常终止
为啥在没有任何变量的时候,上面已存在占用内存。谢谢

解决方案 »

  1.   

    还有这个  
    <?php
    echo memory_get_usage();
    for($ii=0; $ii<1000; $ii++) {

    $c[] = array('A'=>12); }echo("\n");
    $t = 100;
    echo memory_get_usage();
    ?>输出
    ---------- run php ----------
    58224
    295096
    输出完成 (耗时 0 秒) - 正常终止
    我在下面赋值一个$t     上面使用的内存也跟着变呢?
      

  2.   

    $c[] = array('A'=>12);
    $c 不是变量吗?
      

  3.   


    版主 我啥都不用  直接输出
    <?phpecho memory_get_usage();?>结果:
    ---------- run php ----------
    56224
    输出完成 (耗时 0 秒) - 正常终止
    是不是一些服务器变量占了这些内存值呢。
      

  4.   

    php进程启动,也是需要emalloc内存的。
      

  5.   


    请问   有没办法通过人工计算出运行的内存值呢。
    这个值好像不大稳定的,我刚试了一下;又和我发帖的时候不一样啦。
    <?php
    echo memory_get_usage();
    for($ii=0; $ii<1000; $ii++) {$c[] = array('A'=>12); }echo("\n");
    echo memory_get_usage();
    ?>---------- run php ----------
    58408
    295184
    输出完成 (耗时 0 秒) - 正常终止
      

  6.   

    我就觉得奇怪,为啥我在中间赋值一个变量会影响到顶部内存的使用。<?php
    echo memory_get_usage();
    for($ii=0; $ii<1000; $ii++) {$c[] = array('A'=>12); }echo("\n");
    echo memory_get_usage();
    ?>输出是  ---------- run php ----------
    58408
    295184
    输出完成 (耗时 0 秒) - 正常终止<?php
    echo memory_get_usage();
    for($ii=0; $ii<1000; $ii++) {$c[] = array('A'=>12); }echo("\n");
    $t = 20;
    echo memory_get_usage();
    ?>
    只是加了一个t变量,输出为:
    ---------- run php ----------
    58544
    295416
    输出完成 (耗时 0 秒) - 正常终止
    按理来说第一次使用的内存应该是一样的阿,因为那时根本没赋值t。结果是58544 != 58408
      

  7.   

    关于php的内存管理,我推荐你去看一下Laruence的播客:
    http://www.laruence.com/2011/03/04/1894.html
    相信看完后你就明白了。php对内存的管理,不是像你相像的那样单纯,没任何操作前不会有任何内存占用,而实际上,你载入的扩展,以及php本身预定义的全局符号表等等都会占用内存。另外,php不是像c语言的malloc那样,你定义个变量,就一定会去找os要,unset时就立刻释放。一个字节不差的返回给你。尤其对于使用数组时申请内存和释放内存时会产生更奇怪的问题。在c语言中,我们要定义一个不确定元素个数的数组时,都是先malloc一个预估的大小,当数组变大超出我们预申请的大小时,再重新malloc。在php中这一切都帮你做好了,中间过程是隐含的,所以当你用memory_get_usage查看时会发现和你想的不一样。