使用unset销毁变量在内存释放的问题
复制代码代码如下所示:($ i = 1;$ i < 100;$ + +){
$str = str_repeat('01234567 ',我);
美元= memory_get_usage();
unset($str);
B = memory_get_usage(美元);
$ I:。(b美元一美元)。字节;
}
从结果可以看出:
当256字节长时,8×32=256对于释放内存是非常必要的,有些人说它没有直接的空值快。
结果如下:
1:0字节。
2:0字节。
3:0字节。
4:0字节。
5:0字节。
6:0字节。
7:0字节。
8:0字节。
9:0字节。
10:0字节。
11:0字节。
12:0字节。
13:0字节。
14:0字节。
15:0字节。
16:0字节。
17:0字节。
18:0字节。
19:0字节。
20:0字节。
21:0字节。
22:0字节。
23:0字节。
24:0字节。
25:0字节。
26:0字节。
27:0字节。
28:0字节。
29:0字节。
30:0字节。
31:0字节。
32:- 272字节。
33:- 280字节。
34:- 288字节。
35:- 296字节。
36:- 304字节。
37:- 312字节。
38:- 320字节。
39:- 328字节。
40:- 336字节。
41:- 344字节。
42:- 352字节。
43:- 360字节。
44:- 368字节。
45:- 376字节。
46:- 384字节。
47:- 392字节。
48:- 400字节。
49:- 408字节。
50:- 416字节。
51:- 424字节。
52:- 432字节。
53:- 440字节。
54:- 448字节。
55:- 456字节。
56:- 464字节。
57:- 472字节。
58:- 480字节。
59:- 488字节。
60:- 496字节。
61:- 504字节。
62:- 512字节。
63:- 520字节。
64:- 528字节。
65:- 536字节。
66:- 544字节。
67:- 552字节。
68:- 560字节。
69:- 568字节。
70:- 576字节。
71:584字节。
72:- 592字节。
73:- 600字节。
74:- 608字节。
75:- 616字节。
76:- 624字节。
77:- 632字节。
78:- 640字节。
79:- 648字节。
80:- 656字节。
81:- 664字节。
82:- 672字节。
83:- 680字节。
84:- 688字节。
85:- 696字节。
86:- 704字节。
87:- 712字节。
88:- 720字节。
89:- 728字节。
90:- 736字节。
91:- 744字节。
92:- 752字节。
93:- 760字节。
94:- 768字节。
95:- 776字节。
96:- 784字节。
97:- 792字节。
98:- 800字节。
99:- 808字节。
让我们先看一个例子。
复制代码代码如下所示:
< PHP
$ S = str_repeat(1,255); / /串由255 1
($ M = memory_get_usage); / /获取当前内存
撤消(美元的);
百万美元= memory_get_usage(); / / unset(),看看当前的内存占用
回声$ M - $毫米;
>
最后的输出(设置)在存储器(减去取消)后的记忆,如果它是积极的,那么取消(美元的)的已被破坏的记忆(或取消),(在减少内存占用),但我在PHP5和Windows平台,其结果是:-48.does这个节目那时候(的)不破坏由变量的占用的内存发挥作用让我们来做下面的例子。
复制代码代码如下所示:
< PHP
$ S = str_repeat(1,256); / /串由256 1
($ M = memory_get_usage); / /获取当前内存
撤消(美元的);
百万美元= memory_get_usage(); / / unset(),看看当前的内存占用
回声$ M - $毫米;
>
这个例子几乎和上面的例子一样。唯一的区别是,美元是由256个1部分组成的,也就是说,比第一个例子多出1个。结果:224。这表明,未做(的)已被的占用的内存
通过以上的例子,我们可以得出以下结论:第一,unset()函数只能释放内存空间时,变量值多占用256字节的内存空间。
那么有可能释放内存空间设置只要变量超过256让我们再举一个例子来测试它。
复制代码代码如下所示:
< PHP
$ S = str_repeat(1,256); / /这第二相同实例
美元=美元;
$ M = memory_get_usage();
撤消(美元的); / /破坏的
百万美元= memory_get_usage();
回声$ P;
回声$ M - $毫米;
>
刷新页面,我们看到第一行有256个1,第二行是48,这是合理的说,我们已经破坏了S,而P只指变量的美元。它应该没有内容。此外,撤消(美元的)占比设置更多的内存()。现在让我们做如下:
复制代码代码如下所示:
< PHP
$ S = str_repeat(1,256); / /这第二相同实例
美元=美元;
$ M = memory_get_usage();
美元= NULL;
百万美元= memory_get_usage();
回声$ P;
回声$ M - $毫米;
>
现在我们刷新页面。我们看到输出p不再是内容。未固化的内存之间的区别()为224,即占用的内存变量被清除。为S = null这个例子也可以被unset(),如下:
复制代码代码如下所示:
< PHP
$ S = str_repeat(1,256); / /这第二相同实例
美元=美元;
$ M = memory_get_usage();
撤消(美元的); / /破坏的
设置(P);
百万美元= memory_get_usage();
回声$ P;
回声$ M - $毫米;
>
我们毁灭的美元和P使用设置(),然后在内存占用也差224,表明它也可以释放内存,然后我们可以得到另一个结论:结论,只有当所有的变量(如引用变量),针对变量被破坏,将记忆被释放。
我相信,在这个例子中,你应该知道一些关于unset()。至少,我用unset()释放内存变量时不工作。