Arrays oddities

  • From: Alain Meunier <deco33@xxxxxxxxxx>
  • To: "luajit@xxxxxxxxxxxxx" <luajit@xxxxxxxxxxxxx>
  • Date: Mon, 31 Mar 2014 11:04:51 +0200

Hello,

Questions :

1) Why can we allocate a value in an array out of the bound ?

    local ffi = require "ffi"
    
    local bytes = ffi.new("int[2]")
    
    bytes[2] = 4
    bytes[5] = 8
    
    print(bytes[5])

2) Should not an array be faster than a table ?
Io has its part but redoing the same with a lorem ipsum is always me the same 
results
ffi version slower by ~8% / table version.

ffi array version :
    
    local ffi = require "ffi"
    
    local bytes = ffi.new("int[7281624]")
    

    local io_lines_override,tonumber_override = io.lines,tonumber
    
    local f = io_lines_override ("myfile.txt")
    
    local iterator = 0
    
    for line in f do
        
        bytes[iterator] = tonumber_override(line)
        iterator = iterator + 1
    
    end
    
    for ii = 0, 7281624 do bytes[ii] = bytes[ii] + 1 end

-------------------------------------------------------------------------------------------
Table version :
 
    local junction_sentinel = {}
    
   
    local io_lines_override,tonumber_override = io.lines,tonumber
    
    local f = io_lines_override ("myfile.txt")
    
    local iterator = 1
    
    for line in f do
        
        junction_sentinel[iterator] = tonumber_override(line)
        iterator = iterator + 1
    
    end
    
    for ii = 1, 7281624 do junction_sentinel[ii] = junction_sentinel[ii] + 1 end
   
3) Last but not least, -O3 and fast-math helped to improve some random codes 
(cannot be published) by several seconds (~15 seconds average on a broadly 
1.30-2 min very intensive runtime). But not really safe. That is Good. 2.0.3  
is faster but 2.1 much slower (100% slower) on these codes. Will look into a 
publishable code to reproduce it.
                                          

Other related posts: