zoukankan      html  css  js  c++  java
  • 关于lua table实现的一个问题

        脚本table中的元素在c中是分两个地方存放的,即数组与hash表。之前看了一些文章提到,如果key是数字的话,一般放在数组段,如果数字key非常离散,那就会对数字进行hash,然后再存到hash表中。但最近看了lua5.1的源码后发现不是这样的。

        如果一个table已经构造好,这时修改table的内容,不管key是何值,都会将key进行hash。

        如果构造table的时候指定了key的值,不管key是何值,也会将key进行hash。比如:

    t1 = 
    {
      [1] = 100,
      [2] = 200,
      [3] = 300,
    }


        只有构造table时不指定key值,这些value才会放在数组段。比如:

    t2 = {100, 200, 300}


        所以, 用这两种不同的构造方式构造的table的访问效率是不一样的。不过实际应用中,像这样手动构造的table一般不会很大,所以遍历的的消耗也不会相差太远。

        回到文章头,估计之前看的是5.1版本之前的实现,但感觉其实这样做不是更好吗?为什么5.1要改了呢?或者在table的生存期间还会动态调整各个value的位置吧。继续分析。

  • 相关阅读:
    String字符串性能优化的探究
    Spring笔记(5)
    Spring笔记(4)
    力扣217. 存在重复元素
    力扣1480. 一维数组的动态和
    Ribbon 和 Feign 的区别
    Eureka的自我保护机制
    Planar graph and map 3-colorability reduce to one another
    3-colorability
    一少年独坐屋中突然顿悟!-回溯
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3093391.html
Copyright © 2011-2022 走看看