将多个小变量打包到单个字中

in HuaRen.News4 years ago

EVM 在 32 字节字长存储模型下运行。

可以将小于 32 个字节的多个变量打包到一个存储槽中,以最大程度地减少 SSTORE 操作码的数量。尽管 Solidity 自动尝试将小的基本类型打包到同一插槽 中,但是糟糕的结构体成员排序可能会阻止编译器执行此操作。

考虑下面的 Good 和 Bad 结构体。

Image for post

好和坏结构体成员排序的实现示例
使用启用了优化的编译器:solc 0.5.9 + commit.e560f70d,第一个 doBad() 函数调用执行消耗约 60,000 Gas,而 doGood() 仅消耗约 40,000 Gas。注意是一个字长存储的差异(20,000 Gas),因为 Good 结构将两个 uint128 打包为一个字。

结构体优化 - doBad 成本

doBad 函数调用的执行成本为 60709 Gas

结构体优化 - doGood 成本

doGood 函数调用的执行成本为 40493 Gas

本帖 steem 首发

将多个小变量打包到单个字中

最近新帖

  1. 中法新约
  2. 齐桓公称霸过程九合诸侯
  3. 周平王迁都洛邑
  4. 武王利用对商纣怨恨不满鼓动起义
  5. 寒浞表面上对后羿极尽阿谀奉承
  6. 伏羲最大的贡献
  7. 八国联军侵华战争
  8. 太平天国运动的失败
  9. 收复台湾的斗争
  10. 郑成功收复台湾
  11. 戚继光抗倭
  12. 靖难之役
  13. 窝阔台灭亡金国
  14. 完颜阿骨打建立金国
  15. 萧太后治辽
  16. 朱全忠名不副实
  17. “诗仙”李白
  18. 李渊建立唐朝
  19. 北魏孝文帝迁都洛阳
  20. 王马共掌天下
  21. 诸葛亮七擒孟获
  22. 曹操煮酒论英雄
  23. 刘秀建立东汉
  24. 汉武帝独尊儒术
  25. 吕后临朝称制
  26. 项羽破釜沉舟
  27. 吕不韦迎异人归秦
  28. 完璧归赵
  29. 孟子宣讲仁政
  30. 范蠡功成身退
  31. 乱世雄才赵盾
  32. 齐鲁长勺之战
  33. 《诗经》问世
  34. 周文王求贤
  35. 尧舜禅让
  36. 勿慕彼
  37. 以力服人
  38. 人有私
  39. 名为恶
  40. 勿模糊
  41. 不确定的人称回复
  42. 勿饮酒
  43. 视勿移
  44. 忿自泯
  45. 贻亲羞
  46. 有余力
  47. 久必受其累
  48. 不计较个人得失
  49. 很强的处理事情的能力
  50. 当自砺
  51. 耳听未必为虚
  52. 勤俭节约
  53. 谦虚的态度
  54. 劝谏方法
  55. 晨则省
  56. 礼仪教化
  57. 世上无难事
  58. 言讳色媚
  59. 不规道亏
  60. 心非为恶
  61. 人善思齐
  62. 人称回复
  63. 箕踞摇髀
  64. 对待他人的父母如自己的父母
  65. 对孩子礼仪的培养
  66. 身体发肤,受之父母
  67. 亲好力具
  68. 呼喊召唤要即时回应
  69. 跟对领导很重要
  70. 缺坏就补
  71. 仁者多畏
  72. 事忙多错
  73. 劝解的艺术
  74. 乐于读书教子
  75. 猪肉价单月爆涨,恐【回民】增加
  76. 新一轮北京消费券增加一批发放平台
  77. 非常规动作,今日北京关闭所有公园景区
  78. 李国庆和俞渝被儿子告上法庭
  79. 邮寄选票会左右美国大选结果吗?
  80. 金融诈骗比尔盖茨的17岁天才少年?
  81. 新疆乌鲁木齐提升新冠疫情防控措施
  82. 反华斗士班农回炉特朗普大选操纵团队
  83. 失控的印度会不会超过美国疫情?
  84. 美国疫情更趋严重,恐延迟经济回暖
  85. 北京新发地新冠疫情二次爆发教训:戴口罩很重要
  86. 美国冠状病毒病例激增归咎于年轻人
  87. 杨超越毕业典礼崩溃式发言
  88. ipfs的未来值得期待
  89. 隐身的韩国瑜,让民进党丑态百出
  90. 特朗普政府阻挠博尔顿出版白宫回忆录
  91. 北京一餐馆7人确诊新冠肺炎,食品传播更恐怖
  92. 罢韩打开潘多拉魔盒,蓝绿恐陷以罢制罢恶斗
  93. 为何四家监狱出现隐瞒和武汉相关活动,造成500多例确诊?

Coin Marketplace

STEEM 0.21
TRX 0.20
JST 0.034
BTC 99341.76
ETH 3285.44
USDT 1.00
SBD 3.05