C++ 中文周刊 第138期

2024-07-30 14:42:29 浏览数 (2)

周刊项目地址[1]

RSS https://github.com/wanghenshui/cppweeklynews/releases.atom

欢迎投稿,推荐或自荐文章/软件/资源等

请提交 issue[3]

最近在找工作准备面试题,更新可能有些拖沓,见谅

本期文章由 不语 黄亮 赞助

资讯

标准委员会动态/ide/编译器信息放在这里

c 26进展如火如荼 反射又又又又又一次被端了出来,给了一堆符号语法,我说婷婷吧,感觉够呛

感兴趣的可以看看这个 C 26静态反射提案解析[4]

我觉得我不是第一个讨厌这个语法的人

boost 1.84预览版出炉 https://www.boost.org/users/history/version_1_84_0.html

新加入cobalt协程组件和redis客户端两个库,都是堆在asio上面的。可以偷学一下,卷死同行

什么!你说asio你都没研究过,算了还是别研究了,周末应该休息,看一乐就行了

编译器信息最新动态推荐关注hellogcc公众号 OSDT Weekly 2023-11-15 第228期

文章

  • • Coroutine 重构数据库算子——以 hash join probe 为例[5]

这个是我第一次见到计算层引入协程的实践,之前有个corobase论文,另外像scylladdb redpanda更多是把协程放在简单任务逻辑以及文件处理上

这个还是挺精彩的

  • • Why does calling a coroutine allocate a lot of stack space even though the coroutine frame is on the heap?[6]

为啥coroutine需要额外的栈空间?协程栈不应该在heap上吗?

比如这坨代码

代码语言:javascript复制
#include <coroutine>
#include <exception>

// Define a coroutine type called "task"
// (not relevant to scenario but we need *something*.)
struct task { void* p; };

namespace std
{
    template<typename...Args>
    struct coroutine_traits<task, Args...>
    {
        struct promise_type
        {
            task get_return_object() { return { this }; }
            void unhandled_exception() { std::terminate(); }
            void return_void() {}
            suspend_never initial_suspend() { return {}; }
            suspend_never final_suspend() noexcept { return {}; }
        };
    };
}
// End of "task" boilerplate.

void consume(void*);

task sample()
{
    char large[65536];
    consume(large);
    co_return;
}

因为这个coroutine并不会suspend,能走heap allocation elision优化HALO

可能这种场景你可能得关注栈溢出问题,如果你是msvc用户,恭喜你,msvc有bug,没做优化,还是在堆heap上

为什么没做优化?做了,但是没完全生效,代码里写了生成 __coro_elision_buffer

但没判断出__coro_elision_buffer 完全没用没彻底优化掉。已经在修了[7]

当然这种优化是好的,只是提醒你注意你的协程局部对象生命周期而已,你要是害怕,这么玩也不是不行

代码语言:javascript复制
task sample()
{
    auto large = std::make_unique_for_overwrite<char[]>(65536);
    consume(large.get());
    co_return;
}
  • • 莫非我遇到了传说中的bug[8]

很精彩的bit反转,客户端确实少见

  • • 深入浅出 LLVM之 Value 、User 、Use 源码解析[9]
  • • LLVM源码阅读之 BasicBlock 遍历[10]

了解llvm的,看一乐, 作者还是学生,挺厉害的

  • • C Pitfall : shared_future[11]

shared_future::get有复制,注意T的复制是否过重

作者建议干脆别用

  • • 深入理解基于 eBPF 的 C/C 内存泄漏分析[12]

其实就是memcheck

  • • std::source_location is Broken[13]

std::source_location本应该是编译期字符串,但是却只提供一个const char *

脑瘫接口

  • • C 23 Characters[14]
代码语言:javascript复制
QString getSheep() {
  return QStringLiteral("


	

0 人点赞