在Interop中使用指针返回结构会占用大量内存空间吗?

时间:2011-03-09 06:27:35

标签: c# c++ interop

我在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方法中填充?

1 个答案:

答案 0 :(得分:1)

我会回答假设x64。

从理论上说,没关系。如果返回PolylineCg,则结构的大小大于64位。这意味着该值不适合返回寄存器(64位RAX寄存器),并且不能按值返回。这意味着需要为返回值分配足够的空间,并且返回寄存器将指向该分配的空间。

相反,如果通过out / ref参数将PolylineCg参数传递给ConstructPolyline调用,则同样如此。该值必须通过ref / out参数通过引用传递,并且应该产生相同的开销。

两种方法应该具有相同的效率,并且由于您使用的是值类型,因此内存开销将很小。