Skip to content
败犬日报 2025-07-11

败犬日报 2025-07-11

1. CUDA优化黑魔法:假装CUTLASS库(文章)

https://zhuanlan.zhihu.com/p/1926902370920568120

2. 为什么 delete 是虚表第 2 项

https://godbolt.org/z/bqxvKGeTP

cpp
struct Base {
        virtual ~Base();
};
struct Child : Base {
        ~Child();
};
void foo(Base* obj) noexcept {
        [[assume(obj != nullptr)]];
        delete obj;
}
text
foo(Base*):
        mov     rax, QWORD PTR [rdi]
        jmp     [QWORD PTR [rax+8]]

vptr[0]~Child()vptr[1] 是 delete,所以占了两个虚表表项。

3. RTTI 和虚表布局

一般实现上 RTTI 指针在 vptr[-1] 的位置。

关了 RTTI 的话,RTTI 指针填的是 0 或 dummy typeinfo。这是为了让 RTTI 不影响 ABI,没开 RTTI 和 开了 的链接到一起也没事,只要没访问 RTTI 仅虚函数调用是没问题的。

还有另外一个问题,为什么 RTTI 不和虚表放一起,而是间接寻址(类似指针)的方式访问?原因是一样的。如果 RTTI 信息和虚表放一起,开关 RTTI 会影响虚表布局。

4. git rerere 记住解冲突的方法,下次相同的冲突 Git 可以自动解

这个功能能自动识别的场景太局限了,有点鸡肋。