gpt4 book ai didi

c# - 在 Interop 中返回带指针的结构是否占用大量内存空间?

转载 作者:行者123 更新时间:2023-11-28 08:22:36 25 4
gpt4 key购买 nike

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

最佳答案

我会假设 x64 来回答。

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

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

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

关于c# - 在 Interop 中返回带指针的结构是否占用大量内存空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5242170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com