关于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的位置吧。继续分析。

 

posted @ 2013-05-22 19:32  javawebsoa  Views(260)  Comments(0Edit  收藏  举报