Skip to content

Instantly share code, notes, and snippets.

@Benzeliden
Last active May 23, 2018 15:55
Show Gist options
  • Save Benzeliden/ae7472a823bbfc2a3076b1420596f718 to your computer and use it in GitHub Desktop.
Save Benzeliden/ae7472a823bbfc2a3076b1420596f718 to your computer and use it in GitHub Desktop.
local N, M = 7500, 7500
local startTime, sum, memused, memused2, memusedArr,testMatrix
memusedArr = {0,0,0}
matrix = {}
matrix.__index = matrix
function matrix:new(w, h)
self = setmetatable({}, self)
self.w = w
self.h = h
return self
end
function matrix:get(x, y)
return self[(y - 1) * self.w + x]
end
function matrix:set(v, x, y)
self[(y - 1) * self.w + x] = v
end
memused = collectgarbage("count")
local arr1 = {}
startTime = os.clock()
for i = 1, N do
for j = 1, M do
arr1[(i-1) * M + j] = i + j
end
end
memused2 = collectgarbage("count")
memusedArr[1] = memused2 - memused
print("plain array init:", os.clock() - startTime)
memused = collectgarbage("count")
local arr2 = {}
startTime = os.clock()
for i = 1, N do
arr2[i] = {}
for j = 1, M do
arr2[i][j] = i + j
end
end
memused2 = collectgarbage("count")
memusedArr[2] = memused2 - memused
print("multi-array init:", os.clock() - startTime)
memused = collectgarbage("count")
testMatrix = matrix:new(N, M)
startTime = os.clock()
for i = 1, N do
for j = 1, M do
testMatrix:set(i+j, i, j)
end
end
memused2 = collectgarbage("count")
memusedArr[3] = memused2 - memused
print("-----matrix init:", os.clock() - startTime)
print("============================================================================")
print("plain array memory used:", memusedArr[1])
print("multi-array memory used:", memusedArr[2])
print("-----matrix memory used:", memusedArr[3])
print("============================================================================")
startTime = os.clock()
for i = 1, N do
for j = 1, M do
arr1[(i-1) * M + j] = i + j * 2
end
end
print("plain array update:", os.clock() - startTime)
startTime = os.clock()
for i = 1, N do
for j = 1, M do
arr2[i][j] = i + j * 2
end
end
print("multi-array update:", os.clock() - startTime)
startTime = os.clock()
for j = 1, M do
for i = 1, N do
testMatrix:set(i + j * 2, i, j)
end
end
print("-----matrix update:", os.clock() - startTime)
print("============================================================================")
sum = 0
startTime = os.clock()
for i = 1, N do
for j = 1, M do
sum = sum + arr1[(i-1) * M + j]
end
end
print("plain array sum:", os.clock() - startTime, sum)
sum = 0
startTime = os.clock()
for i = 1, N do
for j = 1, M do
sum = sum + arr2[i][j]
end
end
print("multi-array sum:", os.clock() - startTime, sum)
sum = 0
startTime = os.clock()
for j = 1, M do
for i = 1, N do
sum = sum + testMatrix:get(i, j)
end
end
print("-----matrix sum:", os.clock() - startTime, sum)
print("============================================================================")
print("Memory used: ", collectgarbage("count"))
--startTime = os.clock()
--arr1 = nil
--collectgarbage("collect")
--print("collect took",os.clock() - startTime)
--print("after plain table cleaned up: ", collectgarbage("count"))
--startTime = os.clock()
--arr2 = nil
--collectgarbage("collect")
--print("collect took",os.clock() - startTime)
--print("after multi-array cleaned up: ", collectgarbage("count"))
--startTime = os.clock()
--testMatrix = nil
--collectgarbage("collect")
--print("collect took",os.clock() - startTime)
--print("after matrix_____ cleaned up: ", collectgarbage("count"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment