C 中文周刊 第100期
周刊项目地址
资讯
标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2023-02-08 第188期
关于标准委员会的吵架动态,可以看 https://www.zhihu.com/people/mick235711 的动态。这里就不转发了
文章
- 360 安全规则集合
360发布了他们的代码安全规范,还是值得一看的,UB描述了很多
- 为什么main里死循环还会执行其他函数?
一段到处都在传播的代码
代码语言:javascript复制#include <iostream>
int main() {
while(1)
;
}
void unreachable() {
std::cout << "hello worldn";
}
clang会打印hello world而gcc/msvc不会,为啥??
简单来说是没用到的死循环直接给删了,然后没有ret,直接跳到下一个函数了
这也是UB的一种。感兴趣的可以点进去看看
- Optimizing Redis’ Default Compiler Flags
-O3 -flto 性能起码提升5%,后续引入PGO继续探索。PGO还是很值得研究的,针对业务来优化效率更高
- Did you know about std::rank/std::rank_v type_trait to get the rank of the array?
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]>);
数组的维度,这玩意和向量的秩英文名一样啊。。
如何实现?
代码语言:javascript复制#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>();
- Compiling QML to C : A 4x speedup
QML_DISABLE_DISK_CACHE=1 加速 QML编译
- Can sanitizers find the two bugs I wrote in C ?
省流:可以
- A more direct and mistake-free way of creating a process in a job object
又是WinAPI,我看不懂不多逼逼
- Floating-Point Comparison
浮点数比较,很烦
代码语言:javascript复制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
- Stack Frame Layout On x86-64
寄存器,用eax, ebx, ecx, edx, ebp, esp, esi, edi, r8, r9, r10, r11, r12, r13, r14, r15 ,rax eax宽度区别
传参数,用 rdi, rsi, rdx, rcx, r8 r9, 放不下放栈上
来个例子
代码语言:javascript复制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
可以保留
- How can I get the original target of a shortcut without applying any 32-bit adjustments?
看不懂
- Embracing Modern C Safely, Book Review
书评。没看到书没啥说的
- GCC’s -O3 Can Transform Performance
测了一些软件用O3编译二进制大了点,但性能都有提升
视频
最近没啥看的
开源项目需要人手
- asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群384042845和作者对线
- pika 一个nosql 存储, redis over rocksdb,非常需要人贡献代码胖友们, 感兴趣的欢迎加群294254078前来对线
新项目介绍/版本更新
- PocketPy 嵌入式python实现,有点意思
- Boost.Mustache 说不定能进 mustache模版
- quill v2.7.0 released - Asynchronous Low Latency C Logging Library 之前也聊过,版本更新
- CTHASH (Compile Time Hash) 编译期 sha实现
- CoFSM 基于协程的状态机
- kelcoro 协程库
- Cryptography library for modern C .
看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!
本文永久链接
如果有疑问评论最好在上面链接到评论区里评论,这样方便搜索,微信公众号有点封闭/知乎吞评论
代码语言:txt复制 This site is open source. [Improve this page](https://github.com/wanghenshui/cppweeklynews/edit/dev/posts/100.md).