为什么 GCC 不将静态初始化的 C++ 类对象放入 .data

bio*_*bob 1 c++ static gcc initializer

以下是 C++ 中对象类型的两个类似声明:

struct Obj {
    int x;
};

struct ObjC {
    int x;
    ObjC(int x) : x(x) {};
};

Obj obj1 = {100}
ObjC obj2(200);
Run Code Online (Sandbox Code Playgroud)

使用最新版本的 gcc ( riscv64-unknown-elf-toolchain-10.2.0-2020.12.8) 我发现变量obj1正确地放置在该部分中......但是,.data该变量被放置在初始化的部分中......obj2.bss

我知道 GCC 有规定在启动时运行构造函数;但在这种情况下,初始状态obj2在编译时是已知的......

FWIW,我的 IAR 编译器对这段代码没有问题......

我需要向 GCC 提供某种“提示”吗???