Javascript 变量创建 所对应的内存值连续吗 - V2EX
shilianmlxg

Javascript 变量创建 所对应的内存值连续吗

  •  
  •   shilianmlxg Jun 18, 2021 2024 views
    This topic created in 1793 days ago, the information mentioned may be changed or developed.
    比如我
    情况 a
    let a = 1
    let b = 2
    这样是连续的嘛
    情况 b
    let a = 1
    let b = {name:'mafeifei'}
    情况 c
    let a= 1
    setTimeout(()=>{var b =2 },0)
    7 replies    2021-06-20 22:03:53 +08:00
    JeffGe
        1
    JeffGe  
       Jun 18, 2021 via Android
    这得看具体引擎实现吧,变量在内存中的分布我猜标准里没有规定。
    crystom
        2
    crystom  
       Jun 18, 2021
    不能说不连续,但肯定不是 c 语言那样
    shilianmlxg
        3
    shilianmlxg  
    OP
       Jun 18, 2021
    @JeffGe 比如 v8 引擎
    shilianmlxg
        4
    shilianmlxg  
    OP
       Jun 18, 2021
    之前有个帖子
    疑惑来自于这里
    https://v2ex.com/t/781924
    libook
        5
    libook  
       Jun 18, 2021   1
    JS 因为抽象程度比较高,本身是一个比较“反机器”的语言,所以经常被人比作走得很慢的“乌龟”。

    但 V8 经常被人比作“火箭”,这俩结合起来就是“火箭带着乌龟飞”。

    为什么 V8 可以带着 JS 飞起来,甚至性能直逼 Java 这种编译型语言?

    主要是因为 V8 搞了大量奇淫技巧,通过各种动态调整来加速 JS 程序的执行。

    我举个栗子,很多排序算法都有最坏情况,如果我只写死用一种算法的话,遇到最坏情况性能就很差了,但我完全可以写多种算法,要排序的时候先自动判断一下数据是什么特征,然后再动态选择一种最适合的算法来排序,那么整个程序在任何情况下都有不错的性能。(当然 V8 里排序不是这么做的,V8 里用的是 Timsort 进行排序的,这个也算是一种动态决策的复合排序算法)

    JS 里的一个数据结构,在 V8 里可能是会动态改变数据结构和位置的,V8 开发者会分析各种场景,然后分别做出最佳的方案,让 V8 时刻监控程序当前处于什么状态,以随时决定是否要动态调整数据结构、算法,来最大限度提升性能,以及少吃点内存。

    所以分析 JS 在 V8 上运行时候的内存情况,可能意义不大,因为这个不是固定的,同时对于复杂程序来说近乎于混沌状态,只能相信 V8 开发者都做好了优化。

    另一方面来说,硬件、操作系统、V8 引擎、JS 每一层都有自己的“Memory”调度机制,层与层之间都是有抽象的,如果你关心的操作系统上的内存调度情况,你只能看到 V8 的数据,看不到 JS 的数据。
    secondwtq
        6
    secondwtq  
       Jun 18, 2021 via iPhone
    贴子白看了……
    shilianmlxg
        7
    shilianmlxg  
    OP
       Jun 20, 2021
    @libook 谢谢大佬科普~
    About     Help     Advertise     Blog     API     FAQ     Solana     3000 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 02:46 PVG 10:46 LAX 19:46 JFK 22:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86