optimize function

方法一: 只针对1个function

__attribute__((optimize("O0")))
int add (int a, int b )
{
    int x = a;
    int y = b;
    return x + y;
}

int main ()
{
    int r = 1;
    int a = r;
    int b = r;
    func ();
    return 0;
}

方法二:包含在里面的code都不会被optimize

这个写法不一定要以function为范围,可以任意选取一段code。
#pragma GCC push_options
#pragma GCC optimize ("O0")
int add (int a, int b )
{
    int x = a;
    int y = b;
    return x + y;
}

#pragma GCC pop_options
int main ()
{
    int r = 1;
    int a = r;
    int b = r;
    func ();
    return 0;
}
// toggle this
// __attribute__((optimize(0)))
void waste_time() { for (unsigned i = 100000; i--; ); }

// always leave this on
__attribute__((optimize(0)))
void test() {
    for (unsigned i = 1000; i--; ) {
        waste_time();
    }
}

int main() {
    std::cout << Timer::measure(test).count() << "ms\n";
}

标签: c/c++

添加新评论