32位的比较比64位的比较快吗?
我在看这个文件http://www.netlib.org/fdlibm/s_cos.c
他们有这段代码
/* |x| ~< pi/4 */
ix &= 0x7fffffff;
if(ix <= 0x3fe921fb) return __kernel_cos(x,z);
Run Code Online (Sandbox Code Playgroud)
我理解第一行,它计算x的绝对值。但为什么比较如此复杂?通过比较前 32 位而不是全部 64 位,性能是否有任何改进?我能写吗
long unsigned int ix = *(long unsigned int * (&x));
ix &= 0x7fffffffffffffff;
if (ix < 3fe921fb54442d18)
/* What comes next */
Run Code Online (Sandbox Code Playgroud)
并期望在 64 位机器上获得相同的速度性能?虽然我同意这会消耗更多内存。
0x3fe921fb54442d18 是 pi/2。
在这里,当我推入堆栈时,为什么对象会被销毁?
#include <iostream>
#include <stack>
class One
{
private:
int i;
public:
One(int i) {this->i = i;}
~One() {std::cout << "value " << this->i << " is destroyed\n";}
};
int main()
{
std::stack<One> stack;
stack.push(One(1));
stack.push(One(2));
std::cout << "Now I'll stop\n";
}
Run Code Online (Sandbox Code Playgroud)
我之前预计不会看到任何输出Now I'll stop。但我明白了
value 1 is destroyed
value 2 is destroyed
Now I'll stop
value 1 is destroyed
value 2 is destroyed
Run Code Online (Sandbox Code Playgroud)
如果我想防止它们被破坏,我该怎么办?