小编Edu*_*des的帖子

std::lock_guard 如何比 std::mutex::lock() 更快?

我和一位同事争论 lock_guard,他提出 lock_guard 可能比 mutex::lock() / mutex::unlock() 慢,因为实例化和非实例化类 lock_guard 的成本。

然后我创建了这个简单的测试,令人惊讶的是,带有 lock_guard 的版本几乎比带有 mutex::lock() / mutex::unlock() 的版本快两倍

#include <iostream>
#include <mutex>
#include <chrono>

std::mutex m;
int g = 0;

void func1()
{
    m.lock();
    g++;
    m.unlock();
}

void func2()
{
    std::lock_guard<std::mutex> lock(m);
    g++;
}

int main()
{
    auto t = std::chrono::system_clock::now();
    for (int i = 0; i < 1000000; i++)
    {
        func1();
    }

    std::cout << "Take: " << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - t).count() << " ms" << std::endl;

    t = std::chrono::system_clock::now();
    for (int …
Run Code Online (Sandbox Code Playgroud)

c++ mutex

10
推荐指数
1
解决办法
465
查看次数

C++ std::string 初始化性能更好(汇编)

我在玩 www.godbolt.org 来检查哪些代码会生成更好的汇编代码,但我不明白为什么这两种不同的方法会生成不同的结果(在汇编命令中)。

第一种方法是声明一个字符串,然后再设置一个值:

#include <string>
int foo() {
    std::string a;
    a = "abcdef";
    return a.size();
}
Run Code Online (Sandbox Code Playgroud)

其中,在我的 gcc 7.4 ( -O3) 输出中:

.LC0:
        .string "abcdef"
foo():
        push    rbp
        mov     r8d, 6
        mov     ecx, OFFSET FLAT:.LC0
        xor     edx, edx
        push    rbx
        xor     esi, esi
        sub     rsp, 40
        lea     rbx, [rsp+16]
        mov     rdi, rsp
        mov     BYTE PTR [rsp+16], 0
        mov     QWORD PTR [rsp], rbx
        mov     QWORD PTR [rsp+8], 0
        call    std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ optimization

6
推荐指数
1
解决办法
214
查看次数

"new"关键字在ANSI C中意味着什么?

使用ANSI C99编写的旧代码我遇到了一个我不能理解的原型:

short GR_GetX (GR_Block new);
short GR_GetY (GR_Block new);
Run Code Online (Sandbox Code Playgroud)

IDE指示警告,但编译器不指示错误.

这个关键字有一些高级解释,或者只是编译器传递的旧错误?

c

2
推荐指数
1
解决办法
195
查看次数

标签 统计

c++ ×2

c ×1

mutex ×1

optimization ×1