败犬日报 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. 中文注释的合理性
项目都是中国人,用中文注释非常合理,能节省很多时间。