You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Visual Studio 2022在Release构建中初始化整个结构体?

问题背景

给定结构体:

typedef struct foo_s
{
    uint32_t a;
    bool b;
} foo;

Visual Studio 2022为该结构体分配8字节存储空间,尽管bool类型仅占1字节。以下代码在Debug构建中返回true,但在Release构建中返回false:

bool Compare( void )
{
    foo f1 = { 3, true };
    foo f2 = { 3, true };
    return memcmp( &f1, &f2, sizeof( foo ) ) == 0 ? true : false;
}

原因很明确:Debug模式下编译器会将foo的全部8字节清零,而Release模式下出于性能优化不会这么做,结构体预留的8字节中最后3字节是栈上未初始化的垃圾数据。

提问

是否有办法让编译器在Release构建中初始化整个结构体?此代码以C++编译。

已排除的方案(不符合需求)
  • 方案1:
bool Compare( void )
{
    foo f1 = { 0 };
    f1.a = 3;
    f1.b = true;
    foo f2 = { 0 };
    f2.a = 3;
    f2.b = true;
    return memcmp( &f1, &f2, sizeof( foo ) ) == 0 ? true : false;
}
  • 方案2:
bool Compare( void )
{
    foo f1;
    memset( &f1, 0, sizeof( foo ) );
    f1.a = 3;
    f1.b = true;
    foo f2;
    memset( &f2, 0, sizeof( foo ) );
    f2.a = 3;
    f2.b = true;
    return memcmp( &f1, &f2, sizeof( foo ) ) == 0 ? true : false;
}

内容的提问来源于stack exchange,提问作者F.V. Petrov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:39:55