内存大小:字符串或数组之间的最小值

时间:2014-01-16 18:07:31

标签: javascript arrays string memory

    var string = '';
    var array = [];

    for(var i = 0; i < 10000; i++){
        string += '0';
        array.push(0);
    }

哪一个会更小?什么时候/哪里是两者之间的断点?

注意:数字总是1位数。

创建数组比创建字符串快约50%。

3 个答案:

答案 0 :(得分:4)

基于answer here,您可以粗略计算JavaScript中不同数据类型的大小。

使用的与您的问题直接相关的公式,以字节为单位计算大小:

string = string.length * 2
number = 8

基于此,array变量的大小取决于放置在其中的内容类型。当您插入数值时,每个偏移量将为8个字节,因此:

array[number] = array.length * 8

使用这些等式,大小为:

string = 20000
 array = 80000

如果您改为使用array.push('0')(即使用字符串),则stringarray的大小应大致相等。

参考文献:

  1. The String Type - EMCAScript Language Specification

      

    String类型是零个或多个16位无符号整数值的所有有序有序序列的集合。

  2. The Number Type - EMCAScript Language Specification

      

    Number类型具有18437736874454810627(即264-253 + 3)值,表示IEEE标准二进制浮点运算中指定的双精度64位格式IEEE 754值

答案 1 :(得分:0)

要在数组中存储小数字,最好的方法是使用Int8Array  (https://developer.mozilla.org/en-US/docs/Web/API/Int8Array)。

答案 2 :(得分:-1)

阵列总是会更快。

使用字符串,每次追加时,运行时必须为新字符串分配空间,然后丢弃字符串的最后一个版本。

使用数组,它只是扩展一个链表。

http://en.wikipedia.org/wiki/Linked_list

另一方面,字符串可能会占用更少的内存,因为所有数据都在一个连续的RAM块中,而数组也将包含数据和所有链接列表指针。