我在c ++中有以下结构:
#define CGAPI_Exports_Attr __declspec(dllimport)
extern "C"CGAPI_Exports_Attr struct PointCg
{
double x;
double y;
};
extern "C"CGAPI_Exports_Attr struct PolylineCg
{
int num_points;
PointCg *points;
};
互操作方法如下:
extern "C"CGAPI_Exports_Attr PolylineCg ConstructPolyline();
问题是,为了效率和记忆目的,我应该如上所示返回PolylineCg
,还是应该传入PolylineCg
参数并让它在ConstructPolyline
方法中填充?
答案 0 :(得分:1)
我会回答假设x64。
从理论上说,没关系。如果返回PolylineCg,则结构的大小大于64位。这意味着该值不适合返回寄存器(64位RAX寄存器),并且不能按值返回。这意味着需要为返回值分配足够的空间,并且返回寄存器将指向该分配的空间。
相反,如果通过out / ref参数将PolylineCg参数传递给ConstructPolyline调用,则同样如此。该值必须通过ref / out参数通过引用传递,并且应该产生相同的开销。
两种方法应该具有相同的效率,并且由于您使用的是值类型,因此内存开销将很小。