feat(debug): 添加内存泄漏检测脚本

- 实现了随机数生成函数 gen_random
- 添加了堆排序算法实现 heapsort 和 heapsort_r
- 集成了高精度时间测量功能 gethrtime
- 创建了性能测试框架包括 start_test 和 end_test 函数
- 实现了测试结果显示和统计功能 total
- 添加了主函数 main 来执行完整的性能测试流程
pull/1/head
韩天峰 2 months ago
parent bbddd40297
commit 0b815d8d1e
  1. 102
      debug/mem_leak.php

@ -0,0 +1,102 @@
<?php
use native_types;
function gen_random (int $n) {
global $LAST;
return( ($n * ($LAST = ($LAST * IA + IC) % IM)) / IM );
}
function heapsort_r(int $n, &$ra) {
$l = ($n >> 1) + 1;
$ir = $n;
while (1) {
if ($l > 1) {
$rra = $ra[--$l];
} else {
$rra = $ra[$ir];
$ra[$ir] = $ra[1];
if (--$ir == 1) {
$ra[1] = $rra;
return;
}
}
$i = $l;
$j = $l << 1;
while ($j <= $ir) {
if (($j < $ir) && ($ra[$j] < $ra[$j+1])) {
$j++;
}
if ($rra < $ra[$j]) {
$ra[$i] = $ra[$j];
$j += ($i = $j);
} else {
$j = $ir + 1;
}
}
$ra[$i] = $rra;
}
}
function heapsort(int $N) {
global $LAST;
define("IM", 139968);
define("IA", 3877);
define("IC", 29573);
$LAST = 42;
for ($i=1; $i<=$N; $i++) {
$ary[$i] = gen_random(1);
}
heapsort_r($N, $ary);
printf("%.10f\n", $ary[$N]);
}
function gethrtime(): float
{
$hrtime = hrtime();
return (($hrtime[0] * 1000000000.0 + $hrtime[1]) / 1000000000.0);
}
function start_test()
{
ob_start();
return gethrtime();
}
function end_test($start, $name)
{
global $total;
$end = gethrtime();
ob_end_clean();
$total += ($end - $start);
$num = number_format($end - $start, 3);
$pad = str_repeat(" ", 24 - strlen($name) - strlen($num));
echo $name . $pad . $num . "\n";
ob_start();
return gethrtime();
}
function total()
{
global $total;
$pad = str_repeat("-", 24);
echo $pad . "\n";
$num = number_format($total, 3);
$pad = str_repeat(" ", 24 - strlen("Total") - strlen($num));
echo "Total" . $pad . $num . "\n";
}
function main()
{
if (function_exists("date_default_timezone_set")) {
date_default_timezone_set("UTC");
}
$t0 = $t = start_test();
heapsort(20000);
$t = end_test($t, "heapsort(20000)");
total();
}
Loading…
Cancel
Save