美文网首页
JS 的数组在内存中不是连续的?

JS 的数组在内存中不是连续的?

作者: 弱冠而不立 | 来源:发表于2021-03-10 15:23 被阅读0次

传统语言数组的概念:
像 C/C++ 这种传统的编译型的语言,它们的数组在内存中用一串连续的区域来存放一些值,而且它们的数组中存放的数据类型都需要预先设定成同一类型

而对于JS来说的话,数组中存储的数据类型是可以完全不一致的,这就意味着,JS 数组中内存地址不是连续的。(因为传统语言数组下标取值,就是因为是连续,且每小块大小都相等的内存空间,可以直接对应上内存的地址)而 JS 它因为数组可以存放不同类型的数据,而且也能进行数组下标取值。其实这个时候采用的是哈希映射的方式,获取到对应数组下标的值的。

不过,现在的 JS 引擎为了优化 JS 的性能,它会分配一个连续的内存空间给存储了相同数据类型的数组,以达到更好的遍历效果。所以,只要你数组里存的是相同类型的值,在内存中的地址还是连续的。
举例:

const arr = [1, 2, 3, 4, 5]; //JS引擎分配连续的内存空间
const arr2 = [true, "233", {}, 2]; //JS 分配不同的内存空间

另外,也可以使用 ArrayBuffer 获取通用的、固定长度的原始二进制数据缓冲区。它是一个字节数组,通常在其他语言中称为“byte array”。

相关文章

  • JS 的数组在内存中不是连续的?

    传统语言数组的概念:像 C/C++ 这种传统的编译型的语言,它们的数组在内存中用一串连续的区域来存放一些值,而且它...

  • iOS知识复习笔记(19)---数据结构和算法1

    数组和链表的区别 数组静态分配内存,链表动态分配内存 数组内存中连续,链表不连续 数组元素在栈区,链表在堆区 数组...

  • JS中的数组的元素分布-稀疏数组/密集数组

    一:JS中的数组格式 在C语言中,定义的数组类型的结构是连续的。在内存中,会根据定义的数组的类型和大小,确定一片对...

  • 数组、链表、Hash的区别&优缺点 NSSet与NSA

    数组、链表、Hash的优缺点: 1、数组是将元素在内存中连续存放。 链表中的元素在内存中不是顺序存储的,而是...

  • 为什么要用Hash

    数组、链表、Hash的优缺点: 1、数组是将元素在内存中连续存放。 链表中的元素在内存中不是顺序存储的,而是通过存...

  • 算法基础 数据结构

    数据结构分类 数组 数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进...

  • 八大数据结构

    1.数组 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数...

  • 数据结构

    数据结构 数组 内存结构: 在内存中是一段连续的存储结构。优缺点: 由于是在内存中是连续的存储结构,所以数组在读取...

  • 性能优化(一):数据结构优化

    1.数组和链表 数组:是将元素在内存中连续的存储的,因为数据是连续存储的,内存地址连续,所以查找效率高,但是在存储...

  • 链表跟数组的区别,单链表与双链表的区别

    数组静态分配内存,链表动态分配内存;数组在内存中连续,链表不连续;数组利用下标定位,时间复杂度为O(1),链表定位...

网友评论

      本文标题:JS 的数组在内存中不是连续的?

      本文链接:https://www.haomeiwen.com/subject/mbxiqltx.html