• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
金大鑫要坚持
博客园    首页    新随笔    联系   管理    订阅  订阅

C# 数组在内存中的存储

C# 数组是引用类型,那么在内存中是如何存储的呢?

 在VS中调试C#程序,如何查看内存、寄存器、反汇编 在这篇文章里看到了如何在VS 中查看内存

先断点打在数组创建后语句那里,点debug->Windows->Memory, 选一个随便memory

在immediate window里 输入 &变量名 arr,获取arr的内存地址。

&arr
0x009becd8  ----->在堆栈中引用地址
*&arr: 0x02d75cb4  ----->在托管堆中空间的起始地址

 

经过这几天的快餐知识学习,知道了堆栈中是由高向低填充。托管堆中好像相反,这句话不确定,因为垃圾回收了一部分,说是把那些有引用的对象都压缩到一起了。

看内存哈~ c8 3b b8 72 09 什么东西I don't know, if you know, let me know. 

INT 32, 普通值类型都是结构体。

还有一个招,最近才学的,VS里面自动生成构造函数,输入ctor,然后点 ctrl+R+E

还有一个招,自动生成get,set。 private int _name, 然后点 Tab

string和object是唯一预定义的两个引用类型。

16 在内存中存储 00 00 00 10

15 在内存中存储 00 00 00 0F

突然想反射一下 arr[0].GetType()   int32表示的范围是 

 

正负2的31次方的整数。难道是有一位表示符号位吗?我猜的。

 http://blog.csdn.net/zxsydyq/article/details/9125641 c#中int16 int32 int64区别

 long不是真的long,.NET Framework 类型是int64;short不是真的短,.NET Framework 类型是int16.

-2,147,483,648 到 2,147,483,647 int32范围

16进制的1位=2进制的4位,那么32位的2进制,需要32/4 = 8 个16位表示。嗯正好,推理正确。

http://blog.csdn.net/acmilanvanbasten/article/details/14521051 同步块索引syncblock  好的这文章里还提到了他的大兄弟 类型指针。

变量地址又低到高分配

 

posted @ 2017-09-21 11:01  金大鑫要坚持  阅读(5841)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3