gpt4 book ai didi

garbage-collection - D垃圾收集器有用吗?

转载 作者:行者123 更新时间:2023-12-04 07:53:48 25 4
gpt4 key购买 nike

所以我尝试通过在Windows上运行这个程序来测试D垃圾收集器是否正常工作。

DMD 2.057 和 2.058 beta 都给出相同的结果,无论我是否指定 -release-inline-O 等。

编码:

import core.memory, std.stdio;

extern(Windows) int GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);

struct MEMORYSTATUSEX
{
uint Length, MemoryLoad;
ulong TotalPhys, AvailPhys, TotalPageFile, AvailPageFile;
ulong TotalVirtual, AvailVirtual, AvailExtendedVirtual;
}

void testA(size_t count)
{
size_t[] a;
foreach (i; 0 .. count)
a ~= i;
//delete a;
}

void main()
{
MEMORYSTATUSEX ms;
ms.Length = ms.sizeof;

foreach (i; 0 .. 32)
{
testA(16 << 20);
GlobalMemoryStatusEx(ms);
stderr.writefln("AvailPhys: %s MiB", ms.AvailPhys >>> 20);
}
}

输出是:
AvailPhys: 3711 MiB
AvailPhys: 3365 MiB
AvailPhys: 3061 MiB
AvailPhys: 2747 MiB
AvailPhys: 2458 MiB
core.exception.OutOfMemoryError

当我取消注释 delete a; 语句时,输出是
AvailPhys: 3714 MiB
AvailPhys: 3702 MiB
AvailPhys: 3701 MiB
AvailPhys: 3702 MiB
AvailPhys: 3702 MiB
...

所以我想问题很明显……GC 真的有效吗?

最佳答案

这看起来像是回归——它不会发生在 D1 (DMD 1.069) 中。 David Simcha 最近一直在优化 GC,所以它可能与此有关。请提交错误报告。

关于garbage-collection - D垃圾收集器有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8782627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com