从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
周刊项目地址|在线地址 |知乎专栏 | 腾讯云+社区 |
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
更新于5月27日晚九点
编译器信息最新动态推荐关注hellogcc公众号 2022-05-25 第151期
#include <string>
constexpr auto foo() {
return std::string{"bar"};
}
static_assert("bar" == foo());
没啥说的
介绍gcc profiler原理。很长
语言律师Arthur O’Dwyer的提案以及实现,看个乐
介绍封装c标准库文件c++做了啥额外的工作,一些额外的名字mangle,不同的分支调用,noexcept之类的
如果是你,你怎么实现optional的复制呢?
比较简单的想法是析构再构造
template <typename T>
auto Optional<T>::operator=(Optional<T> const& rhs) -> Optional<T>& {
if (has_value_ and rhs.has_value_) {
value_ = rhs.value_;
} else if (has_value_ and not rhs.has_value_) {
value_.~T();
has_value_ = false;
} else if (not has_value_ and rhs.has_value_) {
::new (&value_) T(rhs.value_);
has_value_ = true;
} else {
// nothing
}
return *this;
}
但如果是简单类型,这未免太杀鸡牛刀
如果是Optional<T&>,这可能又不正确。作者仔细的讨论了一番。这里不展开了。复杂
分支和条件移除优化(比如:?表达式)哪个更好?很难说,不一定没有分支更好。但相对好一些
因为:?表达式编译器可能给你加私货,插入if,甚至生成jump,感觉更复杂了
就算你是一行代码,编译器还是可能给你加东西的
unsigned r = ((a & 0xffff0000) != 0) << 4;
unsigned r;
if (a > 65535)
r = 16;
else
r = 0;
__builtin_expect
对编译器来说帮助不大,用这个是优化pipeline的,要知道你的业务场景
Gcc 9加了个__builtin_expect_with_probability
比 __builtin_expect
更准点
没啥说的
simdjson支持avx512更快了
这人Johny’s Software Lab LLC博客挺不错。原来是个咨询公司啊 这怎么能赚到钱的。
我对国外很多软件的咨询赚钱模式感到不可思议。国内根本没有这个环境。归根到底是国内人才太多了?
说回正题
这篇文章讲了一些性能优化点,比如用定制内存分配器让数据局部性更好,以及各种省数据集的操作
说过很多次,cache应用/proxy应用,定制的内存分配器,非常有用,非常降低延迟,比如这个https://github.com/moya-lang/Allocator/blob/master/Allocator.h 别看实现挫,非常够用
还介绍了一些工具,比如https://github.com/andikleen/pmu-tools
看不懂了。
怎么判定一个数组已经排好序了。正常来说遍历一边就行了。不过c++有个is_sorted接口,
另外用 adjacent_find
也是可以的
作者写了个c版的工具,输出代码目录的各种数据(行数,大小等等)这个博客是心路历程,代码在这里https://github.com/skeeto/scratch/blob/master/misc/watc.c
作者写VS Code js插件的,查bug查到编译器头上了。这个是心路历程。
手把手教你用锁
没啥说的。vector<bool>
没人用。
有没有可以居家办公的工作啊,我想居家吉林农村办公