已关闭,此问题为opinion-based。它目前不接受回答。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。
上个月关门了。
Improve this question
这两种选择都是法律的,但哪一种更好或更“干净”:
假设我们有这样的结构:
typedef struct MyStruct {
int val;
} MyStruct;
第一个选项;直接返回一个结构体:
MyStruct Create()
{
MyStruct a;
a.val = 0;
return a;
}
第二个选项:在堆上创建结构体并返回一个指针:
MyStruct* CreatePtr()
{
MyStruct *a = (MyStruct*)malloc(sizeof(MyStruct));
a->val = 0;
return a;
}
我认为最好的选择取决于结构体的大小,但也许它们需要考虑更多的因素?
3条答案
按热度按时间zbwhf8kr1#
根据经验,除非有充分的理由将结构放在堆上,否则应使用堆栈。一般来说,总是尽可能直接地向编译器描述你的意图,这样它就可以做得最好-检查返回值优化,如果你只是传递堆栈,可能会发生什么;结果结构很可能直接构建在调用者的存储中,完全避免了调用堆栈(需要注意)。
我们离为了好的编译而避免直接措辞的时代还有很长的路要走。
如果你有一个具体的原因,这是一个问题,从那里分析和优化。
zlwx9yxi2#
这取决于程序设计。一般来说,返回(和传递)整个结构的代价更高,并且它会消耗自动存储持续时间空间,这在大多数实现中是有限的。
这个问题没有答案,这取决于你的需求。
sy5wg1nm3#
在
struct
很小并用于表示数字的特定情况下,如以下示例..我发现返回一个
struct
(如fraction foo(fraction a, fraction b)
)比指针更有用。该形式模仿math.h
库,并允许:对其他案件不予置评。