C++缓存向量空()

tow*_*120 1 c++

缓存vector.empty()价值是否有意义?

Vector<X> list;
...
if(!list.empty()){          // cmp + jnz
   ...
   // some heavy calculations
   ...
   list.pop_back();
}
Run Code Online (Sandbox Code Playgroud)

VS

Vector<X> list;
bool list_empty;
...
if(!list_empty){            // jnz
   ...
   // some heavy calculations
   ...
   list.pop_back();
   list_empty = list.empty();   // cmp
}
Run Code Online (Sandbox Code Playgroud)

哪里

bool List::empty(){
  return last_ptr == first_ptr;         // implementation from gcc's std
}
Run Code Online (Sandbox Code Playgroud)

我认为缓存更好,因为在list不为空的情况下,只需要1 op进行比较.另外cmp,它应该从内存中获取两个值,而for jnz,只有一个.

PS Vector就是一个很好的例子.这种逻辑可以出现在另一种情况中.

Pau*_*ans 8

鉴于现代积极的编译器优化,人们真的不应该浪费时间来担心这些琐事,但如果你必须:通过一个分析器运行每个版本并亲自看看哪个更快,多少.