如何在不带参数的情况下将大数据集传递给函数

保罗·皮

我试图创建一个通用的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;

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

梅维斯

一种普遍接受的机制是提供一个匿名上下文参数,该参数通过以下方式传递:

void Lanczos( void (*operator) (gsl_vector_complex *,gsl_vector_complex *) , int k, void *ctx)
void WDoperator(gsl_vector_complex * input, gsl_vector_complex * output, void * ctx) {
   Lattice *L = ctx;

...

如果您想更严格地进行错误检查,则可以提出类似以下内容:

struct L_ctx {
    int type;
    void *arg;
};
enum {
    L_NoType,
    L_Lattice,
    L_ComplexLattice,
    ...
};

然后检查是否传递了适当的类型。错误发生的可能性要少一些,但是对于像Golang这样的体面类型系统来说是不匹配的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不调用函数的情况下将参数传递给函数?

来自分类Dev

如何在不展开包装的情况下将ref传递给方法/函数参数?

来自分类Dev

如何在不访问Java母函数的情况下将参数传递给回调

来自分类Dev

如何在不覆盖数据源参数的情况下将附加参数传递给Kendo模板

来自分类Dev

如何在不更改上下文的情况下将参数数组传递给函数?

来自分类Dev

Express - 如何在不使用查询字符串参数的情况下将数据传递给模型

来自分类Dev

如何在不带数字或在Vim中使用:command的情况下将可视范围传递给函数?

来自分类Dev

如何在不覆盖父范围的情况下将参数传递给指令?

来自分类Dev

如何在不进入sbt交互模式的情况下将参数传递给InputTask?

来自分类Dev

如何在不重复自己的情况下将某些参数传递给PowerShell cmdlet?

来自分类Dev

如何在没有for循环的情况下将参数传递给Bash脚本变量?

来自分类Dev

如何在没有id的情况下将jQuery元素传递给JavaScript函数?

来自分类Dev

装饰器如何在不更改其签名的情况下将变量传递给函数?

来自分类Dev

我如何在不包含标签的情况下将联合类型传递给函数

来自分类Dev

如何在不改变原始数组的情况下将数组传递给函数?

来自分类Dev

JQuery如何在没有onclick的情况下将数据传递给点击?

来自分类Dev

Scala继承:如何在未在子级中声明参数的情况下将参数传递给参数?

来自分类Dev

如何在没有预定义的情况下将javascript函数传递给另一个函数?

来自分类Dev

JS-如何在不调用函数的情况下将函数作为参数传递(带有参数)

来自分类Dev

继承List <T>时,如何在没有构造函数的情况下将数据传递给父类?C#

来自分类Dev

如何在不使用.babelrc文件的情况下将两个预设参数传递给babel?

来自分类Dev

在不使用绑定的情况下将'this'和参数传递给addEventListener函数

来自分类Dev

在不使用绑定的情况下将'this'和参数传递给addEventListener函数

来自分类Dev

在python中使用字典将参数传递给开关情况下的函数

来自分类Dev

如何在不使用模板的情况下将左值传递给仅采用右值的函数

来自分类Dev

如何在React中不使用props的情况下将函数传递给组件的层次结构?

来自分类Dev

如何在没有元素的情况下将 e.value 直接传递给 js 函数

来自分类Dev

如何在没有'lambda'关键字的情况下将方法作为函数参数传递?

来自分类Dev

在不带“ call”功能的情况下,在Lua 4中将表值作为函数参数传递

Related 相关文章

  1. 1

    如何在不调用函数的情况下将参数传递给函数?

  2. 2

    如何在不展开包装的情况下将ref传递给方法/函数参数?

  3. 3

    如何在不访问Java母函数的情况下将参数传递给回调

  4. 4

    如何在不覆盖数据源参数的情况下将附加参数传递给Kendo模板

  5. 5

    如何在不更改上下文的情况下将参数数组传递给函数?

  6. 6

    Express - 如何在不使用查询字符串参数的情况下将数据传递给模型

  7. 7

    如何在不带数字或在Vim中使用:command的情况下将可视范围传递给函数?

  8. 8

    如何在不覆盖父范围的情况下将参数传递给指令?

  9. 9

    如何在不进入sbt交互模式的情况下将参数传递给InputTask?

  10. 10

    如何在不重复自己的情况下将某些参数传递给PowerShell cmdlet?

  11. 11

    如何在没有for循环的情况下将参数传递给Bash脚本变量?

  12. 12

    如何在没有id的情况下将jQuery元素传递给JavaScript函数?

  13. 13

    装饰器如何在不更改其签名的情况下将变量传递给函数?

  14. 14

    我如何在不包含标签的情况下将联合类型传递给函数

  15. 15

    如何在不改变原始数组的情况下将数组传递给函数?

  16. 16

    JQuery如何在没有onclick的情况下将数据传递给点击?

  17. 17

    Scala继承:如何在未在子级中声明参数的情况下将参数传递给参数?

  18. 18

    如何在没有预定义的情况下将javascript函数传递给另一个函数?

  19. 19

    JS-如何在不调用函数的情况下将函数作为参数传递(带有参数)

  20. 20

    继承List <T>时,如何在没有构造函数的情况下将数据传递给父类?C#

  21. 21

    如何在不使用.babelrc文件的情况下将两个预设参数传递给babel?

  22. 22

    在不使用绑定的情况下将'this'和参数传递给addEventListener函数

  23. 23

    在不使用绑定的情况下将'this'和参数传递给addEventListener函数

  24. 24

    在python中使用字典将参数传递给开关情况下的函数

  25. 25

    如何在不使用模板的情况下将左值传递给仅采用右值的函数

  26. 26

    如何在React中不使用props的情况下将函数传递给组件的层次结构?

  27. 27

    如何在没有元素的情况下将 e.value 直接传递给 js 函数

  28. 28

    如何在没有'lambda'关键字的情况下将方法作为函数参数传递?

  29. 29

    在不带“ call”功能的情况下,在Lua 4中将表值作为函数参数传递

热门标签

归档