3

So I may want various functions that operate on a line:

inline float yIntercept(const vec2& ptA, const vec2& ptB, float x);
inline float xIntercept(const vec2& ptA, const vec2& ptB, float y);
inline bool lineIntersection(const vec2& ptA0, const vec2& ptB0, const vec2& ptA1, const vec2& ptB1);

The functions takes 2 points for each line representing the line.

Or I can write a line class that has those 2 points and various useful line related methods.

struct Line {
    ... stuff

    inline float xIntercept(float y);
    inline float yIntercept(float x);

    inline bool lineIntersection(const Line& other);

    vec2 m_point[2];
};

One thing I was thinking about is performance of creating an instance of this line class every time I need to call one of these functions just given 2 points.

I may be operating on a point list representing a polygon and don't actually have any line objects instantiated.

At any time I may either call

yIntercept(somePointA, somePointB, 3.0f);

Or

Line(somePointA, somePointB).yIntercept(3.0f);  //I think this would compile

I like the idea of having classes for these kinds of things rather than C style functions, but I was wondering if there's some performance penalty of creating an instance of the class like this rather than just passing the points right into a function. Maybe the compiler does some optimization?

4

2 回答 2

1

我正在考虑的一件事是每次我需要调用这些函数之一时创建这个行类的实例的性能,只给了 2 分。

如果这确实是您的应用程序中的问题,那么您可能“做错了”。我的意思是,如果做得对,创建这个对象的代码应该是非常轻量级的。即使那样,您是否真的需要创建很多这些对象 - 做构成线条的“事情”不会随着时间的推移而存在,因此结构 Line 可以以某种方式成为覆盖对象的一部分。

例如,在多边形中,您可以从点列表中创建 Line 对象,并保留这些对象。

我也会先编写一个通用的、运行良好的代码库,然后在一切正常时进行优化。如果你必须重写一些东西,那就这样吧。希望您已经使您的接口足够通用,以至于您不必重写太多其他代码。

每当性能优化时,请确保您测量、再次测量并记录您为更改它所做的工作。我有时在电子表格中有几百行“尝试修改 X”、“在函数 A 中使用巧妙的技巧”以及结果 - 有时结果是“丢失 5%”(或“丢失 500%”),但在至少你知道结果是什么。使用“我认为编译器会这样做”需要大量使用任何给定编译器的经验。

于 2013-01-26T18:37:22.557 回答
1

根据其他因素选择您的解决方案。可能涉及的努力或可读性。

采用这种方法的原因是因为您在这两种情况之间进行选择:

  1. 产生创建Line对象的额外工作。
  2. 导致将更多参数传递给您的函数的额外工作。

编译器可以对 1. 或 2. 进行优化。它可能会。或不。它可能会有所帮助。或不。

请参阅本文以了解有关像您这样的优化决策的更多信息。作者还行。

http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of-micro-optimization-theater.html

于 2013-01-26T18:57:36.960 回答