公众号
RSS https://github.com/wanghenshui/cppweeklynews/releases.atom
欢迎投稿,推荐或自荐文章/软件/资源等
本周内容不多
标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2023-02-08 第188期
关于标准委员会的吵架动态,可以看 https://www.zhihu.com/people/mick235711 的动态。这里就不转发了
360发布了他们的代码安全规范,还是值得一看的,UB描述了很多
一段到处都在传播的代码
#include <iostream>
int main() {
while(1)
;
}
void unreachable() {
std::cout << "hello world\n";
}
clang会打印hello world而gcc/msvc不会,为啥??
简单来说是没用到的死循环直接给删了,然后没有ret,直接跳到下一个函数了
这也是UB的一种。感兴趣的可以点进去看看
-O3 -flto 性能起码提升5%,后续引入PGO继续探索。PGO还是很值得研究的,针对业务来优化效率更高
static_assert(0 == std::rank_v<void>);
static_assert(0 == std::rank_v<int>);
static_assert(1 == std::rank_v<int[]>);
static_assert(0 == std::rank_v<int[0]>);
static_assert(1 == std::rank_v<int[1]>);
static_assert(1 == std::rank_v<int[42]>);
static_assert(2 == std::rank_v<int[][2]>);
static_assert(2 == std::rank_v<int[1][2]>);
static_assert(3 == std::rank_v<int[1][2][3]>);
数组的维度,这玩意和向量的秩英文名一样啊。。
如何实现?
#include <type_traits>
template<class T>
struct prev;
template<class T, int N>
struct prev<T[N]> : std::type_identity<T> {};
template<class T>
struct prev<T[]> : std::type_identity<T> {};
template<class T>
constexpr auto return_rank()
{
if constexpr (::std::is_array_v<T>) {
return return_rank<typename prev<T>::type>() + 1;
}
return 0;
}
template<class T>
constexpr auto rank_v = return_rank<T>();
QML_DISABLE_DISK_CACHE=1 加速 QML编译
省流:可以
又是WinAPI,我看不懂不多逼逼
浮点数比较,很烦
bool cmpEq(double a, double b,
double epsilon = 1e-7, double abstol = 1e-12)
{
if (a == b) { // 判断inf用的,傻逼inf
return true;
}
double diff = std::fabs(a - b);
double reltol = std::max(std::fabs(a),
std::fabs(b)) * epsilon;
return diff < reltol || diff < abstol;
}
家人们还是看看远处的boost实现吧 https://www.boost.org/doc/libs/1_81_0/boost/test/tools/floating_point_comparison.hpp
寄存器,用eax, ebx, ecx, edx, ebp, esp, esi, edi, r8, r9, r10, r11, r12, r13, r14, r15 ,rax eax宽度区别
传参数,用 rdi, rsi, rdx, rcx, r8 r9, 放不下放栈上
来个例子
long myfunc(long a, long b, long c, long d,
long e, long f, long g, long h)
{
long xx = a * b * c * d * e * f * g * h;
long yy = a + b + c + d + e + f + g + h;
long zz = utilfunc(xx, yy, xx % yy);
return zz + 20;
}
rbp 大家也都懂,也会优化掉,因为可以根据rsp算出来。-fno-omit-frame-pointer
可以保留
看不懂
书评。没看到书没啥说的
测了一些软件用O3编译二进制大了点,但性能都有提升
最近没啥看的
如果有疑问评论最好在上面链接到评论区里评论,这样方便搜索,微信公众号有点封闭/知乎吞评论