NodeMCUのメモリテストについて
前言
NodeMCUでプロジェクトをしていますが、Lua言語はすぐに使えます.C言語で開発するよりずっと速いです.しかし、メモリオーバーフローが顕著な問題である.以前stm 32を使用したときにこの問題に遭遇したことがなく、c言語の連合体は前世紀の51に使われたと思っていた.このプロジェクトが順調に予想された80%の機能に達してから、突然メモリが溢れて番犬を触発したとき、心理状態が爆発した.まず数日かけて最適化し、数kのメモリを我慢したが、いくつかの冗長コードを去勢した上でだった.ソースコードの変更を経ても、Luaコプロセッサがメモリを効率的に節約できない後、NodeMCUのstructモジュールの研究を開始し、C言語の構造体と対話することができる.さらに、私が各種データを保存するメモリの使用状況を研究する研究を引き起こした.
じっけんじょうたい
空の関数をテストしてスタックスペースを占有
空きテーブルの空き容量をテスト
テーブルに数値を作成するメモリオーバーヘッドのテスト
単一テーブルに格納されたデータのオーバーヘッドが平均しているかどうかをテストします.
結論は不明で、時々減少して、時々増加して、関数統計の下で設計することができて、しかしLuaのメモリは比較的に面倒で、制御しにくいです.
テスト変数格納単一データ
関数に数値を格納する単一変数
データを少し大きくすると、利用可能なスタックが増えました.
関数のテーブルに数値を格納
関数内の単一変数格納文字列
関数にテーブルを使用して数値を格納し、字面量を直接印刷します.
関数にテーブルを使用して数字を格納し、indexで印刷します.
pairs関数を使用して印刷
NodeMCUでプロジェクトをしていますが、Lua言語はすぐに使えます.C言語で開発するよりずっと速いです.しかし、メモリオーバーフローが顕著な問題である.以前stm 32を使用したときにこの問題に遭遇したことがなく、c言語の連合体は前世紀の51に使われたと思っていた.このプロジェクトが順調に予想された80%の機能に達してから、突然メモリが溢れて番犬を触発したとき、心理状態が爆発した.まず数日かけて最適化し、数kのメモリを我慢したが、いくつかの冗長コードを去勢した上でだった.ソースコードの変更を経ても、Luaコプロセッサがメモリを効率的に節約できない後、NodeMCUのstructモジュールの研究を開始し、C言語の構造体と対話することができる.さらに、私が各種データを保存するメモリの使用状況を研究する研究を引き起こした.
じっけんじょうたい
空の関数をテストしてスタックスペースを占有
heap0=0
heap1=0
heap0=node.heap()
function fun()
end
heap1=node.heap()
print('@heap',heap0,heap1,(heap0-heap1))
@heap 40576 40376 200
空関数が200 Bスタックの空間を占有していることがわかる空きテーブルの空き容量をテスト
heap0=0
heap1=0
heap0=node.heap()
s={}
heap1=node.heap()
print('@heap',heap0,heap1,(heap0-heap1))
@heap 40576 40496 80
テーブルに数値を作成するメモリオーバーヘッドのテスト
heap0=0
heap1=0
s={}
heap0=node.heap()
s[1]=1
heap1=node.heap()
print('@heap',heap0,heap1,(heap0-heap1))
@heap 40496 40432 64
単一テーブルに格納されたデータのオーバーヘッドが平均しているかどうかをテストします.
heap0=node.heap()
s={1,2,3,4,5,6,7,8,9,10,11,12,13}
heap1=node.heap()
n=13
print('@heap',heap0,heap1,(heap0-heap1-296-88)/n)
@heap 1 39936 39872 64
@heap 2 39936 39872 32
@heap 3 39936 39824 37.333333333333
@heap 4 39936 39824 28
@heap 5 39936 39824 22.4
@heap 6 39936 39760 29.333333333333
@heap 7 39936 39760 25.142857142857
@heap 8 39936 39760 22
@heap 9 39936 39760 19.555555555556
@heap 10 39936 39632 30.4
@heap 11 39936 39632 27.636363636364
@heap 12 39936 39632 25.333333333333
@heap 13 39936 39632 23.384615384615
@heap 14 39936 39632 21.714285714286
@heap 15 39936 39632 20.266666666667
@heap 16 39936 39632 19
@heap 17 39936 39632 17.882352941176
@heap 18 39936 39376 31.111111111111
@heap 19 39936 39376 29.473684210526
@heap 20 39936 39376 28
@heap 21 39936 39376 26.666666666667
@heap 22 39936 39376 25.454545454545
@heap 23 39936 39376 24.347826086957
@heap 24 39936 39376 23.333333333333
@heap 25 39936 39376 22.4
@heap 26 39936 39376 21.538461538462
@heap 27 39936 39376 20.740740740741
@heap 28 39936 39376 20
@heap 29 39936 39376 19.310344827586
@heap 30 39936 39376 18.666666666667
@heap 31 39936 39376 18.064516129032
@heap 32 39936 39376 17.5
@heap 33 39936 39376 16.969696969697
@heap 34 39936 38864 31.529411764706
@heap 35 39936 38864 30.628571428571
@heap 36 39936 38864 29.777777777778
@heap 37 39936 38864 28.972972972973
@heap 38 39936 38864 28.210526315789
@heap 39 39936 38864 27.487179487179
@heap 40 39936 38864 26.8
@heap 41 39936 38864 26.146341463415
@heap 42 39936 38864 25.52380952381
@heap 43 39936 38864 24.93023255814
@heap 44 39936 38864 24.363636363636
@heap 45 39936 38864 23.822222222222
@heap 46 39936 38864 23.304347826087
@heap 47 39936 38864 22.808510638298
@heap 48 39936 38864 22.333333333333
@heap 49 39936 38864 21.877551020408
@heap 50 39936 38864 21.44
@heap 51 39936 38864 21.019607843137
@heap 52 39936 38864 20.615384615385
@heap 53 39936 38864 20.22641509434
@heap 54 39936 38864 19.851851851852
@heap 55 39936 38864 19.490909090909
@heap 56 39936 38864 19.142857142857
@heap 57 39936 38864 18.80701754386
@heap 58 39936 38864 18.48275862069
@heap 59 39936 38864 18.169491525424
@heap 60 39936 38864 17.866666666667
@heap 61 39936 38864 17.573770491803
@heap 62 39936 38864 17.290322580645
@heap 63 39936 38864 17.015873015873
@heap 64 39936 38864 16.75
@heap 65 39936 38864 16.492307692308
@heap 66 39936 37840 31.757575757576
@heap 67 39936 37840 31.283582089552
@heap 68 39936 37840 30.823529411765
@heap 69 39936 37840 30.376811594203
@heap 70 39936 37840 29.942857142857
@heap 71 39936 37840 29.521126760563
@heap 72 39936 37840 29.111111111111
@heap 73 39936 37840 28.712328767123
@heap 74 39936 37840 28.324324324324
@heap 75 39936 37840 27.946666666667
@heap 76 39936 37840 27.578947368421
@heap 77 39936 37840 27.220779220779
@heap 78 39936 37840 26.871794871795
@heap 79 39936 37840 26.53164556962
@heap 80 39936 37840 26.2
@heap 81 39936 37840 25.876543209877
@heap 82 39936 37840 25.560975609756
@heap 83 39936 37840 25.253012048193
@heap 84 39936 37840 24.952380952381
@heap 85 39936 37840 24.658823529412
@heap 86 39936 37840 24.372093023256
@heap 87 39936 37840 24.091954022989
@heap 88 39936 37840 23.818181818182
@heap 89 39936 37840 23.550561797753
@heap 90 39936 37840 23.288888888889
@heap 91 39936 37840 23.032967032967
@heap 92 39936 37840 22.782608695652
@heap 93 39936 37840 22.537634408602
@heap 94 39936 37840 22.297872340426
@heap 95 39936 37840 22.063157894737
@heap 96 39936 37840 21.833333333333
@heap 97 39936 37840 21.60824742268
@heap 98 39936 37840 21.387755102041
@heap 99 39936 37840 21.171717171717
@heap 100 39936 37840 20.96
結論は不明で、時々減少して、時々増加して、関数統計の下で設計することができて、しかしLuaのメモリは比較的に面倒で、制御しにくいです.
テスト変数格納単一データ
heap0=node.heap()
s1=1
s2=2
s3=3
s4=4
s5=5
s7=7
s8=8
s9=9
s10=10
s11=11
s12=12
s13=13
heap1=node.heap()
print('@heap',heap0,heap1,(heap0-heap1-296)/13)
@heap 40864 39672 68.923076923077
同様のメモリの変化は不確定である、時々減少し、時々増加する.関数に数値を格納する単一変数
heap0=0
heap1=0
heap0=node.heap()
function fun()
s1=1
s2=2
s3=3
s4=4
s5=5
s6=6
s7=7
s8=8
end
heap1=node.heap()
print('@heap',heap0,heap1,heap0-heap1)
@heap 40576 39752 824
データを少し大きくすると、利用可能なスタックが増えました.
heap0=0
heap1=0
heap0=node.heap()
function fun()
s1=100000000000000
s2=200000000000000
s3=300000000000000
s4=400000000000000
s5=500000000000000
s6=600000000000000
s7=700000000000000
s8=800000000000000
end
heap1=node.heap()
print('@heap',heap0,heap1,heap0-heap1)
@heap 40576 39800 776
関数のテーブルに数値を格納
heap0=0
heap1=0
heap0=node.heap()
function fun()
s={1,2,3,4,5,6,7,8}
end
heap1=node.heap()
print('@heap',heap0,heap1,heap0-heap1)
@heap 40576 40160 416
初歩的に占有スペースは単一変数貯蔵データより少ないことを発見した.関数内の単一変数格納文字列
heap0=0
heap1=0
heap0=node.heap()
function fun()
s1='1'
s2='2'
s3='3'
s4='4'
s5='5'
s6='6'
s7='7'
s8='8'
end
heap1=node.heap()
print('@heap',heap0,heap1,heap0-heap1)
@heap 40576 39568 1008
関数にテーブルを使用して数値を格納し、字面量を直接印刷します.
heap0=0
heap1=0
heap0=node.heap()
function fun()
s1={1,2,3,4,5,6,7,8}
print(1,2,3,4,5,6,7,8)
end
heap1=node.heap()
print('@heap',heap0,heap1,heap0-heap1)
@heap 40576 40072 504
関数にテーブルを使用して数字を格納し、indexで印刷します.
heap0=0
heap1=0
heap0=node.heap()
function fun()
s1={1,2,3,4,5,6,7,8}
print(s[1],s[2],s[3],s[4],s[5],s[6],s[7],s[8])
end
heap1=node.heap()
print('@heap',heap0,heap1,heap0-heap1)
@heap 40576 39984 592
pairs関数を使用して印刷
heap0=0
heap1=0
heap0=node.heap()
function fun()
s1={1,2,3,4,5,6,7,8}
for k,v in ipairs(s1) do
print(k,v)
end
end
heap1=node.heap()
print('@heap',heap0,heap1,heap0-heap1)
@heap 40576 40048 528