gpt4 book ai didi

javascript - javascript中的var需要多少内存以及何时分配?

转载 作者:行者123 更新时间:2023-11-30 06:17:01 25 4
gpt4 key购买 nike

在Java中

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

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

Q1. How much memory var requires?

Q2. When this memory is allocated to the variable?

在下面的例子中,不同类型的数据被分配给同一个变量

var a = 1;
console.log(a, typeof a);
a = "javascript";
console.log(a, typeof a );

最佳答案

How much memory var requires?

我们永远不会知道。它的范围可以从几个字节。这取决于引擎,以及它采取的优化步骤。举个例子:

 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"),它必须退回到未优化的版本,或者为字符串生成新的优化版本。

由于这是所有(大多数)引擎正在做的事情,您永远不知道变量占用了多少空间,因为它可以在运行时更改(多次)。它甚至可以根据您调用它的方式而改变,无论您是在某个时候调用 eval 还是 with,以及您是否使用调试器来“查看”函数。

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

When this memory is allocated to the variable?

从不,或者当您调用函数,或者对于全局范围:当代码被解析时,或者当任务完成时

 // 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
}

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

关于javascript - javascript中的var需要多少内存以及何时分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55533557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com