gpt4 book ai didi

C 将数组或变量保留在内存中并在下次执行程序时访问它

转载 作者:行者123 更新时间:2023-12-03 17:13:00 26 4
gpt4 key购买 nike

我正在将值从 mysql 加载到数组中,大约需要 20 分钟。字典 表有 3 列 word1 (INT)、word2(INT)、distance(double)word1 和 word1 的值范围为 0 到 57999word2 的一些值被跳过,因为只有 1.8 亿行(不是 58000 * 58000)

int i;
double **word;
word=(double **) calloc(58000, sizeof(double *));
for(i=0;i<58000;i++)
word[i]=(double *) calloc(58000, sizeof(double));

for(word1=0;word1<58000;word1++) {
char query[600];
sprintf(query, "SELECT word1, word2, distance from dictionary where word1='%d'", word1);
mysql_query(con, query);
result = mysql_store_result(con);
while (row = mysql_fetch_row(result)) {
double distance;
word2 = atoi(row[1]);
sscanf(row[2], "%lf", &distance);
word[word1][word2] = distance;
}
mysql_free_result(result);
}

该阵列需要 14 GB 的 RAM 和 7GB 的虚拟内存。现在我可以使用这个数组进行进一步的计算。

for(word1=0;word1<58000;word1++) {
double result[58000];
for(word2=0;word2<58000;word2++) {
if(word1 != word2)
for(i=0;i<58000;i++) {
result[word1] += pow((word[word1][i] - word[word2][i]), 2);
}
}
}

许多数组值为 0但我需要数组键来识别我正在比较哪些单词。我该如何改进这个算法?或者如何将该数组加载到内存中一次并在下次执行程序时重用它?

最佳答案

一般来说你不能。现代操作系统不是这样工作的。

典型的解决方案是将其分成两个程序,并让一个持久程序通过例如共享内存什么的。

如果做不到这一点,当然您可以使用某种适当的原始格式的本地磁盘文件,如果您明智地编写加载代码,它将以 I/O 系统带宽的相当一部分进行加载。当然,或者对文件进行内存映射。

此外,正如评论中指出的那样,请确保问题空间的大小没有增加四倍。

关于C 将数组或变量保留在内存中并在下次执行程序时访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23830350/

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