小编Say*_*yan的帖子

32 位比较比 64 位比较快吗?

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。

c

5
推荐指数
1
解决办法
85
查看次数

为什么在函数内部初始化时 C++ 对象会被破坏?我能做些什么来防止它?

在这里,当我推入堆栈时,为什么对象会被销毁?

#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)

如果我想防止它们被破坏,我该怎么办?

c++ temporary-objects

3
推荐指数
1
解决办法
163
查看次数

标签 统计

c ×1

c++ ×1

temporary-objects ×1