C++ 小结构的使用注意

小结构的使用注意

  1. 小结构,主要是指struct或class,其声明的属性的总大小很少,一般就只有几个基本类型的大小
  2. 这些小结构作为函数的参数或返回值声明的,建议直接让他们拷贝进去, 不要用指针或引用类型了
  3. 这个问题与CPU寄存器有关,引用与指针类型只有引用地址进入寄存器,具体数据还在内存,导致每次调用时,CPU还得去内存取一次值
  4. 以下进行测试,每种方式调用测试10万次,clock计时,结果是

test_fun1 “const TestDat&” cost: 1785
test_fun2 “const TestDat” cost: 1281
test_fun3 “const TestDat*” cost: 1735

明显使用直接拷贝(test_fun2)速度是最快的
以下是测试的代码

struct TestDat {
    int a;
    TestDat() :a(1) {}
};

void test_fun1(const TestDat& a) {
    int t = 0;
    for (int i = 0; i < 10000; ++i) {
        t += a.a;
    }
}

void test_fun2(const TestDat a) {
    int t = 0;
    for (int i = 0; i < 10000; ++i) {
        t += a.a;
    }
}

void test_fun3(const TestDat* a) {
    int t = 0;
    for (int i = 0; i < 10000; ++i) {
        t += a->a;
    }
}

void test_dec() {
    const int test_count = 100000;
    const int d_count = 10000;
    TestDat d[d_count];
    int btime = 0, etime = 0;
    btime = clock();
    for (int i = 0; i < test_count; ++i) {
        test_fun1(d[1000]);
    }
    etime = clock();
    std::cout << "test_fun1 cost: " << etime - btime << std::endl;
    btime = clock();
    for (int i = 0; i < test_count; ++i) {
        test_fun2(d[1000]);
    }
    etime = clock();
    std::cout << "test_fun2 cost: " << etime - btime << std::endl;
    btime = clock();
    for (int i = 0; i < test_count; ++i) {
        test_fun3(&d[1000]);
    }
    etime = clock();
    std::cout << "test_fun3 cost: " << etime - btime << std::endl;
}


int main()
{
    test_dec();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值