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.