gpt4 book ai didi

memory-leaks - 如何修复 D "memory leaks"

转载 作者:行者123 更新时间:2023-12-04 05:14:33 29 4
gpt4 key购买 nike

所以我一直在寻找这个问题的解决方案有一段时间了。我编写了一个程序来从两个单独的文本文件中获取数据,对其进行解析,然后输出到另一个文本文件和一个 ARFF 文件以供 Weka 分析。我遇到的问题是我编写的用于处理数据读取和解析操作的函数没有正确取消分配内存。每个连续的调用都会额外使用 100MB 左右,我需要在整个函数过程中调用此函数 60 多次。有没有办法强制 D 取消分配内存,特别是对于数组、动态数组和关联数组?

我的问题的一个例子:

struct Datum {
string Foo;
int Bar;
}

Datum[] Collate() {
Datum[] data;
int[] userDataSet;
int[string] secondarySet;
string[] raw = splitLines(readText(readFile)).dup;

foreach (r; raw) {
userDataSet ~= parse(r);
secondarySet[r.split(",").dup] = parseSomeOtherWay(r);
}

data = doSomeOtherCalculation(userDataSet, secondarySet);

return data;
}

最佳答案

返回数据中的字符串是否仍指向原始文本文件内部?

D 中的数组切片操作不会复制数据 - 相反,它们只存储指针和长度。这也适用于 splitLinessplit,并且可能适用于 doSomeOtherCalculation。这意味着只要原始文件文本的子字符串存在于程序中的任何位置,就无法释放整个文件的内容。

如果您返回的数据只是您正在阅读的文本文件大小的一小部分,您可以使用 .dup 复制该字符串。这将防止小字符串将整个文件的内容固定在内存中。

关于memory-leaks - 如何修复 D "memory leaks",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30842368/

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