Skip to content

败犬日报 2025-08-27

1. C++ 是否定义过堆栈

标准不需要操作系统的堆栈的概念。

标准里有 stack unwinding(异常相关)和 stacktrace(调用栈分析),所以是有栈的(和操作系统的栈有一点不同)。

至于变量是否存储在栈 / 堆上,标准并没有提及,只定义了变量的“存储期”,或者“生命周期”。

不过话说回来,作为 C++ 工程师必然非常注重实践,不可能只看 C++ 标准层面的抽象。从这点上看,标准是否定义堆栈意义不是很大。

2. 父类 16 字节,子类有成员变量还是 16 字节

这是因为父类为了字节对齐,尾部有 padding,一些情况下子类可以往这里面塞成员变量。

例如:

cpp
#include <cstdint>
#include <cstdio>

class A {
    int64_t a;
    int32_t b;
};

class B : A {
    int32_t c;
};

int main() {
    printf("%zu %zu\n", sizeof(A), sizeof(B));  // 输出 16 16(GCC 15.1)
}

往期有个更复杂的例子:继承中的 public private 影响内存布局。

3. 中文注释的合理性

项目都是中国人,用中文注释非常合理,能节省很多时间。

4. 少用全局变量 / 单例模式,对单元测试不友好