繁体   English   中英

提升元组性能

[英]Boost tuple performance

根据boost :: tuple文档 ,访问元组的单个元素与访问成员变量具有相同的性能。 例如,给出以下声明:

tuple<A, B, C> t1(A(), B(), C());
struct T { A a; B b; C c; }
T t2;

这两个陈述应该具有相同(或可忽略不计的差异)的表现:

t1.get<2>();
t2.c;

我查看了boost :: tuple的来源,如果我理解正确(我不确定), get<N>函数实际执行此操作:

C get<2>(tuple<A, B, C>& t)
{
    return t.tail.tail.head;
    //Generally:  return t.tail. <<N times>> .head;
}

这更类似于链接列表中的查找而不是直接访问,并且,据我所知,具有O(N)复杂度而不是O(1),这是从成员访问期望的。 根据我过去的经验,我认为我错了; 但是我的错误是什么? 如何get真正的工作?

你对列表般的表现是正确的。 但是,它可以在编译时解析,因此可以在运行时归结为O(1)。 (给出足够好的优化编译器。)

请记住,在C ++中,点运算符不是指针引用,它是直接偏移计算。 一般的答案是肯定的,所有n的i1.i2.i3.in是在编译时可计算的恒定时间操作。

如果你想深入了解编译器内部的一些内容而不深入挖掘,请查看LLVM getelementptr http://llvm.org/docs/LangRef.html#i_getelementptr这正是CLANG等C ++编译器如何定位LLVM的时候编译结构引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM