具体类型的不同,占用的字节大小

C# 中的数据类型根据是否为引用类型或值类型,以及具体类型的不同,占用的字节大小也不同。以下是 C# 中常见数据类型及其占用字节数的详细介绍:

一、值类型(Value Types)

值类型直接存储数据值,位于栈内存或结构体中,占用固定字节大小。

1. 整数类型
类型字节大小范围(有符号)范围(无符号)
sbyte1 字节-128 到 127无(无符号对应 byte
byte1 字节无(有符号对应 sbyte0 到 255
short2 字节-32,768 到 32,767无(无符号对应 ushort
ushort2 字节无(有符号对应 short0 到 65,535
int4 字节-2,147,483,648 到 2,147,483,647无(无符号对应 uint
uint4 字节无(有符号对应 int0 到 4,294,967,295
long8 字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807无(无符号对应 ulong
ulong8 字节无(有符号对应 long0 到 18,446,744,073,709,551,615
2. 浮点与小数类型
类型字节大小精度(有效数字)范围
float4 字节约 7 位±1.5×10⁻⁴⁵ 到 ±3.4×10³⁸
double8 字节约 15-17 位±5.0×10⁻³²⁴ 到 ±1.7×10³⁰⁸
decimal16 字节28-29 位±1.0×10⁻²⁸ 到 ±7.9×10²⁸(精确小数计算)
3. 布尔与字符类型
类型字节大小说明
bool1 字节存储 true 或 false
char2 字节存储 Unicode 字符(如 'A'

二、引用类型(Reference Types)

引用类型存储对象的内存地址(引用),位于堆内存中。其本身占用的字节大小取决于操作系统:

  • 32 位系统:引用占 4 字节(32 位地址)。
  • 64 位系统:引用占 8 字节(64 位地址)。

常见引用类型包括:

类型说明字节大小(引用)
string字符串(不可变字符序列)4/8 字节
class 自定义类用户定义的类4/8 字节
interface接口4/8 字节
array 数组任何类型的数组4/8 字节
object所有类型的基类4/8 字节

三、结构体(Struct)

结构体是值类型,但可包含多个字段,其总字节大小为所有字段字节大小之和(需考虑内存对齐)。
例如:

struct Point {
    public int x;  // 4 字节
    public int y;  // 4 字节
    // 总大小:8 字节(4+4,无对齐额外开销)
}

四、特殊类型

  1. dynamic 类型

    • 动态类型在编译时不检查类型,运行时根据赋值确定类型,本质是 System.Object 的包装,引用占 4/8 字节。
  2. void 类型

    • 表示无类型(如无返回值的方法),不占用实际存储字节。

五、内存对齐(重要补充)

C# 中值类型和结构体的实际存储大小可能受“内存对齐”影响:

  • 为提高 CPU 访问效率,数据会按特定边界(如 4 字节、8 字节)对齐。
  • 例如:struct Test { byte b; int i; } 中,byte 占 1 字节,但 int 需从 4 字节边界开始存储,因此结构体总大小为 8 字节(1 + 3 填充 + 4)。

可通过 [StructLayout(LayoutKind.Explicit)] 和 [FieldOffset] 特性手动控制对齐。

总结表格

数据类型类型分类字节大小说明
sbyte值类型1 字节有符号 8 位整数
byte值类型1 字节无符号 8 位整数
short值类型2 字节有符号 16 位整数
ushort值类型2 字节无符号 16 位整数
int值类型4 字节有符号 32 位整数
uint值类型4 字节无符号 32 位整数
long值类型8 字节有符号 64 位整数
ulong值类型8 字节无符号 64 位整数
float值类型4 字节单精度浮点数
double值类型8 字节双精度浮点数
decimal值类型16 字节高精度十进制数
bool值类型1 字节布尔值
char值类型2 字节Unicode 字符
string引用类型4/8 字节字符串引用
自定义 class引用类型4/8 字节类实例引用
object引用类型4/8 字节所有类型的基类引用

了解数据类型的字节大小对内存优化、网络传输(如序列化)和性能调优至关重要,尤其是在处理大量数据或底层编程场景中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值