使用联合与多个结构
Posted
技术标签:
【中文标题】使用联合与多个结构【英文标题】:Using Unions vs Multiple structs 【发布时间】:2019-06-12 05:08:20 【问题描述】:我是 C++ 的新手,有时我不确定什么是更好的性能/内存方式。我的问题是我需要具有两个指向 vec3(3 个浮点数)和 vec3/vec2 的指针的结构。
现在我正在尝试决定是否使用: - 具有两个构造函数的联合,一个用于 vec3,一个用于 vec2 - 创建两个结构,一个将包含 vec2 和一个 vec3
struct vec3
float x,y,z;
;
struct vec2
float x,y;
;
struct Vertex
template <typename F>
Vertex(vec3 *Vertices,F Frag)
: m_vertices(Vertices),m_fragment(Frag)
union Fragment
Fragment(vec3 *Colors)
:colors(Colors)
Fragment(vec2 *Texcoords)
:texcoords(Texcoords)
vec3 *colors;
vec2 *texcoords;
m_fragment;
vec3 * m_vertices;
这段代码运行良好,但我很担心性能,因为我打算经常使用 Vertex 结构,我的程序可能有数千个 Vertex 结构实例。
【问题讨论】:
"thousand" 没什么好担心的。 测量是唯一真正停止担心的方法。程序中真正的瓶颈位于您没想到的地方是很常见的。如果你还没有一个像样的分析器,那么一定要去购物。 附注:如果要使用这些向量执行向量计算,可以使用Eigen::Vector2f
或Eigen::Vector3f
。比为他们实现自己的结构和程序更简单、更容易
谢谢,但我已经使用 lib 作为向量,我现在无法发送我的代码,这只是代表我的问题的副本。
【参考方案1】:
如果每个Vertex
可以有任何一个 colors
或texcoords
,但不能两者兼有,那么union
(或者更好的是std::variant<vec3, vec2>
)是有意义的。 p>
如果Vertex
可以同时拥有colors
和texcoords
,那么union
将不起作用,因为union
中只有一个成员可以在时间。
至于性能,简介,简介,简介。以这样一种方式构建您的界面,即union
或单独成员的选择对调用者是不可见的。然后以两种方式实现它并测试哪个性能更好(或者是否有明显的差异)。
【讨论】:
以上是关于使用联合与多个结构的主要内容,如果未能解决你的问题,请参考以下文章