.Net 5的 Span结构内存分析

假如说有一下程序使用了Span:

static void Main(string[] args)
{
Span span = new byte[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
span = span.Slice(5, 2);
GC.Collect();
Console.WriteLine(span.Length);
Console.ReadLine();
}

分析如下:span数组在内存的存储布局

在这里插入图片描述
断点到此处,并打印出 rbp 寄存器内容

在这里插入图片描述
span结构体的地址18 C77F EBF0,打印出18 C77F EBF0的地址

在这里插入图片描述
打印出结构体指向的地址
在这里插入图片描述
注意看箭头长剪头0a 代表的是数组的个数,总共有十个,也就是上面span填充的1到10
小箭头表示单个元素,也是从1到10,刚好符合上面的代码段 Span span = new byte[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }。

MySQL数据库的内存结构主要包括以下几个部分:buffer pool、change buffer、Log Buffer和adaptive Hash Index。 buffer pool是MySQL中最重要的内存结构,它用于缓存数据页,提高查询性能。当查询需要读取或写入数据时,首先会检查buffer pool中是否已经存在相应的数据页,如果存在,则直接在内存中进行操作,避免了频繁的磁盘读写操作。 change buffer是用于处理插入、删除和修改等操作引起的索引变化。当数据页不在buffer pool中时,change buffer会将这些操作记录下来,然后在将来的某个时刻将其应用到对应的索引页上,减少了直接修改索引页的次数,提高了性能。 Log Buffer是用于缓存事务日志的内存区域。当执行事务操作时,MySQL会将修改数据的操作记录到事务日志中。Log Buffer可以减少对硬盘的写操作,提高了事务的执行速度。 adaptive Hash Index是一种自适应哈希索引,用于加速热点数据的访问。它会根据查询的模式动态地调整哈希索引的大小和形状,以提高查询性能。 通过这些内存结构的合理使用,可以提高MySQL数据库的性能和响应速度。更详细的信息可以参考MySQL官方文档中关于InnoDB内存结构的说明。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mysql的架构、数据结构(内存+磁盘)](https://blog.csdn.net/early_or_later/article/details/106407689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [mysql 内存架构](https://blog.csdn.net/jnrjian/article/details/129204260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值