败犬日报 2025-02-16
1. 会议还通过了 P3475(废除没人能懂的 memory_order::consume)
这是一个比 acq 弱的内存序。
acq-rel 同步是如果 acq 读到了 rel 的影响,那么 rel 前面的都对 acq 后面的可见。consume-rel 同步是如果 consume 读到了 rel 的影响,那么 consume 前数据依赖于被 rel 写入的值的那些数据都对 consume 后面的操作可见。consume 只限制前面 rel 对写入值有数据依赖的部分,acq 则是 rel 前面所有部分。
比如拿单链表搓个栈,流程是先 new 节点,将节点的 nxt 指向头,再 cas。这时 cas 写入的是 new 出来的节点,而节点的 nxt 指向头这部必须对后面读到这个新节点的 pop 操作可见。
为什么删除:<https://wg21.link/p3475>
一个原因是实现起来非常困难,导致现有的编译器都用 acq 来实现 consume。
2. clang parse 的使用
深入探索 clang(上) - YKIKO的文章 - 知乎
https://zhuanlan.zhihu.com/p/21319978959
3. 写 cpp parser 几乎不可能
clang 的代码不算测试有 100 万行。
4. 栈帧的大小是编译期决定的吗
栈帧是一个函数使用的栈空间。
不考虑 C 的 VLA(变长数组)和 alloca 的话,一个函数使用的栈空间可以被计算出来,完全可以在编译期决定。