【问题标题】:Meaning of `:2` in `uintptr_t gc:2` [duplicate]`uintptr_t gc:2`中`:2`的含义[重复]
【发布时间】:2022-01-01 21:07:00
【问题描述】:

我正在通过Julia 后端找到这个

struct _jl_taggedvalue_bits {
    uintptr_t gc:2;
};

当我初始化它并查看调试器时,gc 是零初始化的。那么,gc:2的确切含义是什么?

在这里找到: https://github.com/JuliaLang/julia/blob/8c9799530383d571d5beab4e530d86e40a289929/src/julia.h#L95

【问题讨论】:

  • 它没有初始化,它是一个局部变量。
  • 无关?请参阅C11 6.7.2.1#5“位域的类型应为_Boolsigned intunsigned int 或其他一些实现定义的类型的合格或非合格版本。”注意没有uintptr_t
  • @pmg,uintptr_t 实现没有定义吗?
  • @tstanisl,嗯,是的,但是将 2 位与标识符中包含“ptr”的类型关联起来感觉不对。 :-)

标签: c++ c


【解决方案1】:

当我初始化它并查看调试器时,gc 是零初始化的。

它不是零初始化的。初始化为零和未初始化但顺便说一下内存中的值为零是有区别的。

:2uintptr_t gc:2中的含义

这是位域的语法。 2 是字段的宽度。

【讨论】:

  • 许多糟糕的工具链在调试构建中将所有堆栈零初始化,我想是为了尽可能长时间地隐藏错误,这样它们就不会在便宜的时候尽早修复很容易。然后当你切换到发布版本时,整个程序就会中断。
猜你喜欢
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 2013-07-11
  • 2022-12-10
  • 1970-01-01
相关资源
最近更新 更多