周刊项目地址[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]
QString getSheep() {
return QStringLiteral("