var中的var和分配时需要多少内存?

问题描述 投票:1回答:1

就像在java中一样

int requires 4 bytes
float requires 4 bytes
char requires 2 bytes

但在javascript中我们只有var类型的变量。

Q1。内存变量需要多少?

Q2。当这个内存分配给变量?

如下例所示,不同类型的数据被分配给同一个变量

var a = 1;
console.log(a, typeof a);
a = "javascript";
console.log(a, typeof a );
javascript variables memory-management
1个回答
-1
投票

内存变量需要多少?

我们永远不会知道。它可以从无到有几个字节。这取决于引擎及其所采用的优化步骤。举个例子:

 function test() {
   var unused = "stuff";
 }

在这种情况下,unused不能使用,编译器可能决定完全优化它,然后它不占用内存。但是,如果在该函数中添加断点,则必须回退到未优化的版本并且必须分配unused

或者拿这个:

function addOne(n) { return n + 1; }

var test = addOne(2);
test = addOne(3);

编译器可以通过以下几种方式对其进行优化:

1)它没有优化任何东西,然后n可以包含任何可能的JavaScript值,因此它可能引用某种"value" superclass。引用将占用几个字节,类实例本身也是如此。

2)它假设n总是一个数字(因为它从调用中看到),并生成优化的字节码,只在堆栈中分配一个数字(或整数)。这将占用8个字节(可能更少/更多)。

3)它完全内联函数,n根本不存在。结果代码是:

 var test = 2 + 1;
 test = test + 1;

现在,如果你做addOne("test"),它必须回退到未经优化的版本,或者为字符串生成新的优化版本。

因为这是所有(大多数)引擎正在做的事情,你永远不知道变量需要多少空间,因为它可以在运行时更改(多次)。它甚至可以改变,这取决于你如何调用它,你可以调用evalwith,然后使用调试器“调查”函数。

对于全局变量(例如在您的情况下),引擎可能无法进行优化(因为代码的许多部分可以与之交互),因此情况1可能适用。

当这个内存分配给变量?

从来没有,或者在调用函数时,或者在全局范围内:解析代码时,或者达到赋值时。

 // assuming a non optimized case:
function test() { // a reference holder for a gets allocated
   let a;
   a = {}; // an object gets allocated, a reference to it gets stored in the already allocated slot
}

上面的优化是针对V8的well documented,它在Chrome和NodeJS等中运行。

© www.soinside.com 2019 - 2024. All rights reserved.