列表存储内存的两种形式
2023-09-14 09:06:37 时间
1.顺序表结构
32位的操作系统每个存储空间占四个字节。
然后列表中同类型的数据的元素的地址是相连的比如下图
[200,390,78,1212]
假设第一个元素的地址的0x27(x表示的是十六进制),下一个元素的地址就是0x27+*4Bytes=0X31 (每个元素会占用4个位置)
所以以此类推 每块元素存储空间的地址分别为:0x27,0x31,0x35,0x39.
当把Li这个列表赋值给一个元素的时候 实际上是这个变量,指向首个元素的地址。
Li=[200,390,78,1212]
,当引用下标取元素的时候,表示的是一个推移量,比如取Li[2],首先第一步获取Li的内存地址0x27然后往后推移二个得到0x27+2x4Bytes=0x35,也就是对应下图的第三个元素。
也就是说下标实际上是一个推移量的表示。
2.元素外置(索引取得是地址的地址)
如下列表[1,"ok",1.111,2333]]
当列表里的元素不是同等类型的时候,此时的内存地址也是不连续的,此时的地址存储情况和上述的有所不同,首先对每个元素分配好空,但是并不连续,然后再把内存地址作为数据
存到另外的空间的,一个内存地址占用四个字节,这时候内存地址的数据占用的四个空间的地址是连续的。然后
此时的取值顺序就是成了,首先获取内存地址数据所在的空间的内存地址,然后找到相应的内存地址对应的元素。
相关文章
- JVM 一张图带你了解内存分配过程 搞懂逃逸分析|标量替换|指针碰撞|空闲列表|TLAB
- C/C++ 遍历进程内存块
- 【数据存储】浮点型数据在内存中的存储
- 【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )
- 【Linux 内核 内存管理】物理分配页 ⑤ ( get_page_from_freelist 快速路径调用函数源码分析 | 遍历备用区域列表 | 启用 cpuset 检查判定 | 判定脏页数量 )
- 管理64bit Linux: Unleashing Memory Management Power(64位linux内存)
- Oracle内存管理技术简介(oracle内存管理)
- 内存探索Linux内存:快速查找内存大小(查找linux)
- Linux服务器解放内存,实现最优性能(linux服务器释放内存)
- Linux临时内存优化实践(linuxtmp内存)
- MySQL优化:构建高性能内存数据库(mysql内存数据库)
- Linux系统内存分配与清理实战(linux 内存被占用)
- 使用Redis缓存提升内存性能(缓存 内存 redis)
- 深入解析PHP垃圾回收机制对内存泄露的处理
- c#程序定期把内存信息记录到log日志示例