Nullable 的大小是多少?

2024-01-21

所以,实际上有几个问题:

  1. An int (Int32) 被指定为(显然)32 位。怎么样int? (Nullable<int>)?我的直觉告诉我,整数将是 32 位,布尔值还要多 8 位,但实现可能比这更复杂。
  2. 我会用回答我自己的问题sizeof(int?);但作为int?是托管类型,这是不允许的。我知道类型的大小可能依赖于平台,并且在对象包含对其他对象的引用的情况下,sizeof类似的操作会产生误导。但是,在给定当前环境的情况下,有没有办法获得托管类型的“基线”大小(即新实例化的实例的大小)?

永远不要问这样的问题非常重要,因为你不会得到直接的答案。

但既然你无论如何都这么做了:最小大小是 0 字节。当 JIT 优化器设法将值保留在 CPU 寄存器中时,您就会得到它。下一个大小是 2 个字节,对于 bool?和 byte?,1 个字节表示 HasValue,另一个字节表示值。你很少会得到这样的结果,因为局部变量必须与 4 的倍数的地址对齐。额外的 2 个字节的填充根本不会被使用。

下一个尺寸是短3吗?和 char?,您现在将获得 1 个字节的填充。

到下一个的大跃进,int?需要 5 个字节,但填充将其增加到 8 个。

等等。您可以通过编写如下代码来找到这一点:

        int front = 42;
        bool? center = null;
        int back = 43;
        Console.WriteLine("", front, center, back);

并使用调试器查看机器代码指令。注意 ebp 寄存器偏移量。并注意堆栈会向下增长。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nullable 的大小是多少? 的相关文章

随机推荐

  • 是否有不同步的 Java Stack 的直接替代品?

    我有一个使用堆栈数据结构的大型代码库 由我编写 这是为了方便起见 我有时将其用作堆栈 有时将其用作向量 列表 然而 经过性能审查后 我们决定不想为同步安全支付额外费用 我现在需要用非同步结构替换这个结构 并且在代码中多次提到 我很高兴发现
  • golang中资源应该保存在哪里

    我的应用程序使用 json 配置文件和其他资源 我应该将它们放置在项目层次结构中的哪个位置 我找不到答案http golang org doc code html http golang org doc code html 如何编写Go代码
  • Angular.js ui-grid 自定义日期过滤器

    我正在使用角度网格 ui grid 位于ui grid info http ui grid info 我正在尝试制作一个自定义过滤器 它将使用日期输入控件按日期过滤网格 一个用于小于 一个用于大于 我似乎可以在 columnDefs 中使用
  • 动态更改IP地址?

    考虑一下这个案例 我想经常抓取网站 但有一天 限制后我的IP地址被阻止了 那么 如何动态更改我的IP地址或任何其他想法 一种方法使用Scrapy http scrapy org 将使用两个组件 RandomProxy and RotateU
  • 了解oauth 2.0中客户端id、客户端密钥的需求

    我有一个网站 要求用户通过提供电子邮件和密码来登录以获得访问令牌 其中访问令牌令牌用于访问 api 然后 用户可以在访问令牌提供的范围内获得读 写的访问权限 那么 这里我想了解的是 client id 和 client Secret 在这种
  • Automapper、泛型、dto funtimes

    这是交易 我有一个报告设计器 用户可以根据一些预定义的数据集创建报告 他们可以选择要包含在报告中的一组列 然后在运行报告时 通过使用自动映射器将 NHibernate 集合映射到 dto 类集合来创建 IList 这样做的问题是 DTO 集
  • E:软件包“oracle-java8-installer”没有安装候选者

    我尝试使用以下命令安装 java8 sudo add apt repository ppa webupd8team java sudo apt get update sudo apt get install oracle java8 ins
  • React Bootstrap 弹出窗口在外部点击时关闭

    React Bootstrap 提供了一个弹出窗口控件 我希望在单击弹出窗口外部时将其关闭 其方式与模态的工作方式类似 默认情况下点击开箱即用即可将其关闭 有没有办法使用 ReactBootstrap 来做到这一点 或者我需要自定义代码吗
  • SwiftUI – 如何将 NavigationView 的标题设置为大标题(或小标题)?

    使用 SwiftUI 如何更改导航栏的标题大小 在标准标题或大标题之间进行选择 SwiftUI iOS 14 NavigationView TopLevelView navigationBarTitleDisplayMode inline
  • 函数声明与函数定义

    如果我有这个原型 int bar int 对于编译器我是宣告标识符bar 如果我有这样的定义 int bar int a 对于编译器我是defining标识符bar 一般来说 定义会为对象分配存储空间 但是 函数声明也是如此吗 另外在这种情
  • C++:提取分析数学表达式的符号/变量

    我有用户可以提供的表达式 例如 a sin w t a b c x 2 y 2 2 我愿意just获取那里的变量列表 我不需要做任何替换 所以 对于第一个公式 它是 a w t 对于第二个 a b c 对于最后一个 x y 该表达式主要是为
  • 使用 yum 安装同一软件包的多个版本? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一台安装了奇怪的内部版本 MySQL 的服务器 并且想在该节点上安装collectd 不幸的是 collectd 依赖于 MySQL 并且安装失败
  • 用于将数据从业务机会复制到相关自定义对象的自定义按钮

    我有一个自定义对象 用于映射到机会的产品设置 这是一种一对多的关系 一个机会映射到许多设置对象 但一个设置对象仅映射到一个机会 机会有一些设置字段需要充当相关自定义对象的默认值 不幸的是 我不能只在公式中指定它们 出现错误 我想做的是有一个
  • 使用钩子时等待状态更新

    如何使用 Hooks 等待状态更新 当我提交表格时 我需要检查是否termsValidation在运行一些附加代码之前为 false 如果状态刚刚发生变化 它就不会注意到这一点 import React useState from reac
  • 在常见情况下什么时候适合使用 Core Animation 而不是 UIView 动画

    这与许多小错误有关 这些小错误可能被一个人通常认为是次要的 但另一个人则认为是重大错误 我越来越注意到的是 当使用所有口味时UIView animateWithDuration 它实际上修改了不必要的东西 例如我的视图的多个属性 以执行简单
  • 如何从右向左滑动切换div?

    请看这个小提琴http jsfiddle net MKwwH http jsfiddle net MKwwH 我想要链接images link从右向左滑动切换 document ready function hidden hide soun
  • 我可以使用“com.apple.springboard.lockcomplete”通知吗?

    我试图找到设备锁定状态 因为 UIApplicationState 在锁定设备时给出了错误的状态 它给出了 UIApplicationStateActive 几秒钟 我找到了一种解决方案达尔文通知 https developer apple
  • Visual Studio 还是 GCC? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java 中对象的链式调用和继承

    当声明链式调用的方法时 通常它returns this在该方法的末尾 所以我声明 public class Foo public Foo setTitle String title return this And public class
  • Nullable 的大小是多少?

    所以 实际上有几个问题 An int Int32 被指定为 显然 32 位 怎么样int Nullable