C ++-如何将大数组作为函数的输入

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

我有一个函数,它接受几个大型多维浮点数组作为输入。结果,我使堆栈崩溃。

我是C / C ++的初学者,因此,如果这个问题很愚蠢,我将提前致歉。无论如何,在环顾四周之后,这个问题并不是特别新,通常的解决方案是将其作为全局变量或使用向量(而不是数组)。

但是,这段C ++代码旨在用作共享库,并从Python脚本获取输入并返回(或修改)值(也包含在数组中)。因此,我认为不可能将其声明为全局(如果我错了,请更正我)。

因此,除了使用向量,还有其他方法吗?我之所以不能使用C ++向量,是因为Python中没有等效的数据类型。如果重要的话,我正在使用ctypes在Python和C ++之间进行通信。

python c++ shared-libraries ctypes
1个回答
0
投票

在C / C ++中,无法通过值将数组作为函数参数传递。您可以将指针传递给数组和数组的大小。在C ++中,您还可以传递对数组的引用以及数组的大小(在模板参数中)。无论哪种情况,都不会复制该数组,并且被调用的函数将在调用方为其分配位置的位置就地访问该数组。

请注意,数组可以包装在结构中,在这种情况下可以按值传递。在C ++中,std::array是此类示例。但是调用者必须初始化该结构而不是原始数组。 std::vector的相似之处在于它是一种结构,并且在复制矢量时会自动复制元素,但与C数组不同,std::array会为元素动态分配内存。

但是,如果要与C API集成,则很可能仅限于C结构解决方案中包装的指针+大小或指针+大小。处理数组的规则(例如谁分配和释放数组,允许写入数组等)是特定于您正在使用的特定API的。通常,会使用一组专用的函数来处理库提供的数组。您应该阅读有关Python中采用的约定的API文档。

© www.soinside.com 2019 - 2024. All rights reserved.