使用结构作为类型检查的基元的包装的开销?

问题描述

| 假设我想获得额外的类型检查,以处理在语义上意味着不同的原语:
public struct Apple
{
    readonly int value;

    // Add constructor + operator overloads
}

public struct Orange
{
    readonly int value;

    // Add constructor + operator overloads
}
关键是我们无法将“苹果与桔子”进行比较,因此将实际的int包装在结构中意味着我们可以进行类型检查以及通​​过代码获得一些额外的可读性和文档。 我的问题是:无论是在内存还是速度上,与之相关的开销是多少?由于结构是值类型,包含这些结构的变量是否为32位或更大?使用这些结构而不是基元的性能开销又如何呢?运算符重载是否会产生较大的开销? 关于这样做的智慧还有其他建议吗?     

解决方法

        内存中没有使用
Marshal.SizeOf()
可以验证的结构的开销:
struct testStruct
{
    public readonly int value;
}
..

int size = Marshal.SizeOf(typeof(testStruct)); //returns 4
这也与
sizeof(testStruct)
返回的相同:
unsafe
{
    int size = sizeof(testStruct); //returns 4
}
根据MSDN,两种大小调整方法之间的区别是:   虽然您可以使用   Marshal.SizeOf方法,该值   此方法返回的值并不总是   与返回的值相同   sizeof。 Marshal.SizeOf返回   类型确定后的大小   封送,而sizeof返回   大小,因为它已经由   公共语言运行时,包括任何   填充。     ,        为此,我可能会回避,但是您可以这样做:
using Apple = System.Int32;
using Orange = System.Int32;
您将无法跨文件使用它。从技术上讲,您仍然可以将苹果与桔子进行比较。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...