搜尋
首頁後端開發php教程PHP unset銷毀變數並釋放內存

PHP的unset()函數用來清除、銷毀變量,不用的變量,我們可以用unset()將它銷毀。但某些時候,用unset()卻無法達到銷毀變數所佔用的記憶體!我們先來看一個例子:

  1. $s=str_repeat('1',255); //產生由255個1組成的字串
  2. $m=memory_get_usage(); //取得目前佔用記憶體
  3. unset($mm$s$s ();
  4. //unset()後再查看當前佔用內存
  5. echo
  6. $m
  7. -$mm;set>? )之後佔用內存,如果是正數,那麼說明unset($s)已經將$s從內存中銷毀(或者說,unset()之後內存佔用減少了),可是我在PHP5和windows平台下,得到的結果是:-48。這是否可以說明,unset($s)並沒有起到銷毀變數$s所佔用記憶體的作用?我們再作下面的例子:

$s

=
    str_repeat
  1. (
  2. '1'
  3. ,256); //產生由256個1組成的字串$m=memory_get_usage(); //取得目前佔用記憶體
  4. unset($mm$s$s (); //unset()後再查看目前佔用記憶體
  5. echo
  6. $m
  7. -$mm;?>
  8. -
  9. $mm;?>?$mm;
  10. ?>
  11. ?不同是,$s由256個1組成,即比第一個例子多了一個1,得到結果是:224。這是否可以說明,unset($s)已經將$s所佔用的記憶體銷毀了?

透過上面兩個例子,我們可以得到以下結論:

結論一、unset()函數只能在變數值佔用記憶體空間超過256位元組時才會釋放記憶體空間。 那麼是不是只要變數值超過256,使用unset就可以釋放記憶體空間呢?我們再來一個例子來測試一下:

  • $s
  • =str_repeat('1',256); //這和第二個例子完全相同
  • $p
  • =&$s;
  • $m
  • =memory_get_usage();$m=memory_get_usage();
  • $s
  • $mm=memory_get_usage();
  • echo
  • $p
  • .'
    '
    ;$p.'
    ';
  • ?>
  • 刷新頁面,我們看到第一行有256個1,第二行是-48,按理說我們已經銷毀了$s,而$p只是引用$s的變量,應該是沒有內容了,另外,unset($s)後記憶體佔用卻比unset()前增加了!現在我們再做以下的範例:
  • $s
  • =str_repeat

    (

    '1'
      ,256);
    1. //這和第二個例子完全相同
    2. $p=&$s;$m
    3. =memory_get_usage();
    4. $m=memory_get_usage(); s為null
    5. $mm
    6. =memory_get_usage();
    7. echo
    8. $p.'
      '
      ;$p
    9. .
    10. '
      ';
    11. ?>
    12. 現在刷新頁面,我們看到,輸出$p已經是沒有內容了,unset()前後內存佔用量之差是224,即已經清除了變量佔用的內存。本例的$s=null也可以換成unset(),如下:
    13. $s=str_repeat('1',256); //這和第二個例子完全相同
    $p

    =&

    $s
      ;
    1. $m=memory_get_usage();$m=memory_get_usage(); $s unset($p
    2. );
    3. $mm=memory_get_usage();
    4. echo
    5. $m
    6. -$mm;?>
    7. 我們將$s和$p都使用unset()銷毀,這時再看內存佔用量之差也是224,說明這樣也可以釋放內存。那麼,我們可以得到另外一條結論:
    8. 結論二、只有當指向該變數的所有變數(如引用變數)都被銷毀後,才會釋放記憶體。
    9. 相信經過本文的例子後,大家應該對unset()有所了解了,最起碼,本人用unset()也是為了在變數不起作用時,釋放記憶體。
    10. 以上就介紹了PHP unset銷毀變數並釋放內存,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    如何使用PowerShell自动执行任务如何使用PowerShell自动执行任务Feb 20, 2024 pm 01:51 PM

    如果您是IT管理员或技术专家,您一定意识到自动化的重要性。尤其对于Windows用户来说,MicrosoftPowerShell是最佳的自动化工具之一。微软为满足您的自动化需求提供了各种工具,无需安装第三方应用程序。本指南将详细介绍如何利用PowerShell自动化执行任务。什么是PowerShell脚本?如果您有使用PowerShell的经验,您可能已经使用过命令来配置您的操作系统。脚本是.ps1文件中这些命令的集合。.ps1文件包含由PowerShell执行的脚本,例如基本的Get-Help

    CAMM2 for desktop PCs: MSI explains the benefits of the new RAM standard for gaming towersCAMM2 for desktop PCs: MSI explains the benefits of the new RAM standard for gaming towersAug 17, 2024 pm 06:47 PM

    The first LPCAMM2 modules for laptops are already being delivered, and desktop mainboards are also expected to be equipped with CAMM2 in future. CAMM2 and LPCAMM2 are not compatible with each other, and even on desktop PCs, customers need to be caref

    五个精选的Go语言开源项目,带你探索技术世界五个精选的Go语言开源项目,带你探索技术世界Jan 30, 2024 am 09:08 AM

    在当今科技快速发展的时代,编程语言也如雨后春笋般涌现出来。其中一门备受瞩目的语言就是Go语言,它以其简洁、高效、并发安全等特性受到了许多开发者的喜爱。Go语言以其强大的生态系统而著称,其中有许多优秀的开源项目。本文将介绍五个精选的Go语言开源项目,带领读者一起探索Go语言开源项目的世界。KubernetesKubernetes是一个开源的容器编排引擎,用于自

    Go语言开发必备:5个热门框架推荐Go语言开发必备:5个热门框架推荐Mar 24, 2024 pm 01:15 PM

    《Go语言开发必备:5个热门框架推荐》Go语言作为一门快速、高效的编程语言,受到越来越多开发者的青睐。为了提高开发效率,优化代码结构,很多开发者选择使用框架来快速搭建应用。在Go语言的世界中,有许多优秀的框架可供选择。本文将介绍5个热门的Go语言框架,并提供具体的代码示例,帮助读者更好地理解和使用这些框架。1.GinGin是一个轻量级的Web框架,拥有快速

    java如何发起http请求调用post与get接口java如何发起http请求调用post与get接口May 16, 2023 pm 07:53 PM

    一、java调用post接口1、使用URLConnection或者HttpURLConnectionjava自带的,无需下载其他jar包URLConnection方式调用,如果接口响应码被服务端修改则无法接收到返回报文,只能当响应码正确时才能接收到返回publicstaticStringsendPost(Stringurl,Stringparam){OutputStreamWriterout=null;BufferedReaderin=null;StringBuilderresult=newSt

    使用Golang的Web框架Echo框架实现分布式任务调度使用Golang的Web框架Echo框架实现分布式任务调度Jun 24, 2023 am 11:49 AM

    随着互联网的发展和信息技术的进步,大数据时代已经来临,数据分析、机器学习等领域也得到了广泛的应用。在这些领域中,任务调度是一个不可避免的问题。如何实现高效的任务调度,对于提高效率至关重要。在本篇文章中,将介绍如何使用Golang的Web框架Echo框架实现分布式任务调度。一、介绍Echo框架Echo是一个高性能、可伸缩、轻量级的GoWeb框架。它基于HTT

    Laravel开发:如何使用Laravel Echo和Pusher实现WebSockets通信?Laravel开发:如何使用Laravel Echo和Pusher实现WebSockets通信?Jun 13, 2023 pm 05:01 PM

    Laravel是一个流行的PHP框架,具有高度可扩展性和高效性,它提供了很多强大的工具和库,让开发者可以快速构建高质量的Web应用程序。其中,LaravelEcho和Pusher是两个非常重要的工具,通过它们可以很容易地实现WebSockets通信,本文将详细介绍如何在Laravel应用程序中使用这两个工具。什么是WebSockets?WebSockets

    Curl Get命令的示例Curl Get命令的示例Mar 20, 2024 pm 06:56 PM

    在Linux中,URL或Curl客户端是一个流行的命令行实用程序,允许您使用HTTPS、HTTP、FTP等多种协议在网络上传输数据。它允许您使用其get、post和request方法发送和接收数据。其中,你需要经常使用“get”方法。因此,学习各种方法和各种选项,你可以用来提高你的生产力变得至关重要。“执行卷曲操作非常简单,只需输入几个简单的命令即可完成。尽管这看似简单,但许多用户并未充分认识到其潜力。因此,这篇简短指南提供了一些关于在Linux系统中使用“curlget”命令的实例。”Curl

    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.能量晶體解釋及其做什麼(黃色晶體)
    2 週前By尊渡假赌尊渡假赌尊渡假赌
    倉庫:如何復興隊友
    4 週前By尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    4 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SecLists

    SecLists

    SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

    EditPlus 中文破解版

    EditPlus 中文破解版

    體積小,語法高亮,不支援程式碼提示功能

    mPDF

    mPDF

    mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),