如何在不使用C进行参数的情况下将大数据集传递给函数

问题描述 投票:1回答:2

我正在尝试创建一个通用的Lanczos算法,该算法接受一个运算符(函数指针)并在C中从该运算符打印一定数量的特征值。我正在使用GNU科学库来处理矢量和矩阵。具体地说,所讨论的运算符采用一些输入向量,并通过引用输出一个向量。因此,我希望Lanczos方法的函数原型至少看起来像,

void Lanczos( void (*operator) (gsl_vector_complex *,gsl_vector_complex *) , int k    );

其中k是我要打印的特征值的数量。问题在于,有问题的运算符让我立即对寻找特征值感兴趣,因为它需要使用我在先前模拟中生成的大量外部数据。具体来说,我感兴趣的运算符可以原型为

void WDoperator(gsl_vector_complex * input, gsl_vector_complex * output, lattice * L)

在程序的其他地方,我将latticesite结构定义为

typedef struct lattice{
  site * R[10*10*10*10];
}lattice;
typedef struct site{
  gsl_matrix_complex * link[4];
}site;

但是,当然,它的编写方式无法将类似于WDoperator的函数指针传递给Lanczos。解决这个问题的想法是只拥有一个保存我的模拟结果的全局lattice指针,而不是将其作为参数传递给WDoperator。但是,在研究stackoverflow时,似乎普遍的共识是不使用全局变量,尤其是不使用全局指针。那么,有没有我没有想到的更好的方法呢?有没有一种方法可以“抑制”函数的参数,使其适合我的Lanczos例程将接受的函数指针?如果要使用全局指针,是否有使用它们的最佳实践,这样我就不会创建内存泄漏的怪物了?特别是考虑要存储在晶格中的数据的大小(目前有40,000个矩阵,但是一旦我能正常工作,我想按比例放大,使其大约为200k矩阵)。如果在此之前有类似的问题,我深表歉意,但我已尽力将论坛范围扩大到类似的问题。

c function-pointers lattice lanczos
2个回答
0
投票
一种普遍接受的机制是提供通过以下方式传递的匿名上下文参数:

0
投票
是否有一种方法可以“抑制”函数的参数,使其适合Lanczos例程将接受的函数指针?
© www.soinside.com 2019 - 2024. All rights reserved.