c# - C#中小数据类型是如何打包的

标签 c# .net memory-management mono

我不打算提高性能或内存使用率,这个问题纯粹是出于好奇。

主要问题 给定以下类,C# 编译器 (Mono + .NET) 会将两个 short 变量打包成 4 个字节还是消耗 8 个字节(对齐)?

public class SomeClass {
    short a;
    short b;
}

次要问题 如果上述问题的答案不是 4 字节,以下替代方案是否会提供任何优势(其中 SomeClass 被大量使用):

// Warning, my bit math might not be entirely accurate!
public class SomeClass {
    private int _ab;

    public short a {
        get { return _ab & 0x00ff; }
        set { _ab |= value & 0x00ff;
    }
    public short b {
        get { return _ab >> 8; }
        set { _ab |= value << 8; }
    }
}

最佳答案

正如@David_M 所说,这取决于运行时,但您可以使用 [StructLayout] 属性强制执行它,该属性具有一个 Pack 成员,您可以使用它来控制包装。或者,您可以使用 [FieldOffset] 手动布置结构的成员(甚至重叠,这就是您在 .NET 中实现联合的方式)。

关于c# - C#中小数据类型是如何打包的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11140897/

相关文章:

c# visual studio 2015,Symantec 删除 setup.exe 文件并阻止安装

c# - 使用 Web API 在 CRM 数据库中添加查找 GUID 字段时出现错误请求错误

c# - GooglePlayGame 服务在 Unity 中无法正常工作

javascript - 如何在 HttpHandler ProcessRequest 中获取字符串数组值?

java - kubernetes pod 内存 - java gc 日志

c++ - C++ 分配器的 std::align_val_t 的有效对齐值是多少?

c# - 选择正确的报告工具

c# - 如何创建大型整数数组来测试 LongCount?

c# - 仅从 Winforms 顶部栏中删除图标,而不是从任务栏中删除图标

iphone - 在 Instruments 中进行分析时 main.m 中的内存泄漏?