搜索
首页后端开发php教程PHP变量和内存管理的学习笔记
PHP变量和内存管理的学习笔记Mar 12, 2017 pm 01:38 PM
php变量

1、memory_get_usage 函数

int memory_get_usage ([ bool $real_usage = false ] )


PHP脚本使用的内存(不含 memory_get_usage() 函数本身占用的内存)

memory_get_usage()的参数$real_usage,默认为 FALSE;当设置为 TRUE 时,得到的内存值为PHP 内存管理占用的内存。

//php分配到的内存
var_dump(memory_get_usage(true));
//php使用内内存
var_dump(memory_get_usage());

结果

int 262144
int 239368


PHP的内存管理机制是:预先分配一块空间,用来存储变量,当空间不够时,再申请一块新的空间。

memory_get_usage(true)即为预先分配的内存。


之前没有注意过PHP页面的内存使用,以后优化页面时候也应该用这个函数来分析代码。


2、变量赋值和内存

var_dump(memory_get_usage());
 
$a = "Hello World";
var_dump(memory_get_usage());
 
$b = $a;
var_dump(memory_get_usage());
 
unset($b);
var_dump(memory_get_usage());
 
unset($a);
var_dump(memory_get_usage());

结果

int 239776
int 239912
int 240000
int 239912
int 239776


239912-239776=136

240000-239912=88


$a和$b赋值所使用的内存不同,原因是$b赋值并没有分配内存,这88个字节是输出函数占用的。

另外销毁$b,并不影响$a使用的内存,这个是内存管理引用计数的原因

改一下例子就能很清楚的了解变量赋值和内存的关系

var_dump(memory_get_usage());
 
$a = "Hello World";
var_dump(memory_get_usage());
 
$b = "Hello World";
var_dump(memory_get_usage());
 
unset($b);
var_dump(memory_get_usage());
 
unset($a);
var_dump(memory_get_usage());

结果

int 239816
int 239952
int 240088
int 239952
int 239816

239952-239816=136

240088-239952=136


另外引用赋值占用内存规则和直接赋值相似,这也涉及到内存管理的引用计数规则


3、php垃圾回收机制,这部分了解的还不够深入,简单记录一个函数

xdebug_debug_zval 需要安装xdebug扩展

$a = "Hello World";
xdebug_debug_zval('a');

输出

a:

(refcount=1, is_ref=0),string 'Hello World' (length=11)

refcount 指向该值的变量数量

is_ref 代表是否有地址引用

类型



变量赋值的时候:is_ref为false  refcount为1

手册地址

引用计数的基本知识

http://php.net/manual/zh/features.gc.refcounting-basics.php

每个php变量存在一个叫"zval"的变量容器中。一个zval变量容器,除了包含变量的类型和值,还包括两个字节的额外信息。第一个是"is_ref",是个bool值,用来标识这个变量是否是属于引用集合(reference set)。通过这个字节,php引擎才能把普通变量和引用变量区分开来,由于php允许用户通过使用&来使用自定义引用,zval变量容器中还有一个内部引用计数机制,来优化内存使用。第二个额外字节是"refcount",用以表示指向这个zval变量容器的变量(也称符号即symbol)个数。所有的符号存在一个符号表中,其中每个符号都有作用域(scope),那些主脚本(比如:通过浏览器请求的的脚本)和每个函数或者方法也都有作用域。   


以上是PHP变量和内存管理的学习笔记的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP Notice: Undefined variable:解决方法PHP Notice: Undefined variable:解决方法Jun 25, 2023 pm 04:18 PM

在PHP开发中,我们经常会遇到PHPNotice:Undefinedvariable的错误提示。这个错误提示表示我们在代码中使用了一个未定义的变量。虽然这个错误提示不会导致代码崩溃,但是它会影响代码的可读性和可维护性。下面,本文将为大家介绍一些解决这个错误的方法。1.在开发过程中使用error_reporting(E_ALL)函数在PHP开发中,我们可

PHP Notice: Undefined variable: arr in的解决方法PHP Notice: Undefined variable: arr in的解决方法Jun 22, 2023 am 10:21 AM

PHPNotice:Undefinedvariable:arrin的解决方法在PHP编程中,我们经常会遇到“Notice:Undefinedvariable”这个错误提示。这个错误提示一般是因为访问了未定义的变量或者变量未被初始化导致的。对于这个问题,我们需要及时找到问题并解决。在本文中,我们将重点讨论PHPNotice:Undefin

如何在PHP中使用数字变量如何在PHP中使用数字变量Sep 13, 2023 pm 12:46 PM

如何在PHP中使用数字变量在PHP中,数字变量是一种无需声明而直接使用的变量类型。可以使用数字变量进行数学计算、数据比较和其他数值操作。本文将介绍如何在PHP中使用数字变量,并提供具体的代码示例。定义数字变量在PHP中,定义数字变量非常简单,只需直接给变量赋予一个数字即可。下面是一个例子:$number=10;在上面的代码中,我们定义了一个名为$numb

PHP Notice: Undefined variable: sql的解决方法PHP Notice: Undefined variable: sql的解决方法Jun 23, 2023 am 08:51 AM

在开发PHP应用程序时,如果遇到了"Undefinedvariable:sql"的提示,这通常意味着您正在引用一个未定义的变量。这可能是由于许多原因引起的,例如变量名称拼写错误、作用域问题或代码中的语法错误等。在本篇文章中,我们将探讨这个问题的各种原因,并提供一些解决这个问题的方法。1.变量名称拼写错误在您的PHP代码中,如果变量名称不正确或拼写错误,系

如何快速排除PHP变量未定义错误?如何快速排除PHP变量未定义错误?Dec 17, 2023 am 10:23 AM

如何快速排除PHP变量未定义错误?在PHP开发中,经常会遇到变量未定义的错误。这是因为在代码中使用了一个未赋值的变量。当遇到这种错误时,我们需要迅速找到错误的原因并解决它。以下是一些快速排除PHP变量未定义错误的方法,帮助您更快地定位和修复错误。开启错误报告:当我们开启错误报告时,PHP会显示出所有的错误和警告信息,包括变量未定义错误。我们可以通过在代码的开

PHP Notice: Undefined variable: result的解决方法PHP Notice: Undefined variable: result的解决方法Jun 22, 2023 pm 01:32 PM

PHPNotice:Undefinedvariable:result是指在PHP程序中调用了一个未定义的变量result,这会导致程序产生Notice级别的警告。这种情况一般是由于程序员在编写PHP代码时未正确定义变量或者变量的作用域造成的。如果不及时解决,这种Notice级别的警告可能会导致程序的运行出现问题。那么,如何解决PHPNotice:

如何通过引用传递PHP变量如何通过引用传递PHP变量Aug 26, 2023 am 09:01 AM

在PHP中,您可以使用和号(&)符号将变量按引用而不是按值传递。这样可以在函数或方法内修改原始变量。主要有两种方式可以通过引用传递PHP变量:使用ampersand符号在函数/方法声明中使用和符号将变量传递给函数/方法时在函数/方法声明中使用和号在PHP中,您可以使用函数/方法声明中的和号符号(&)通过引用传递变量。以下是更新的解释:要通过在函数/方法声明中使用&符号来传递引用变量,您需要在函数/方法定义中在参数名称之前包含&符号。这表示参数应该通过引用传递,允许

PHP编程中有哪些常见的变量?PHP编程中有哪些常见的变量?Jun 12, 2023 am 10:06 AM

在PHP编程中,变量是存储值的基本单元,用于在程序执行过程中储存和使用数据。在PHP中,变量可以被赋予不同的数据类型,包括整型、浮点型、字符串、数组等等。在本文中,我们将介绍PHP编程中常见的变量及其用法。简单变量简单变量是最常见的变量类型,它们可以存储整数、浮点数、字符串等常规数据类型。在PHP中,未定义变量的初始值为NULL。以下是几个实例:整型变量:$

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器