`

数据存储

 
阅读更多
内存对齐
静态大小的变量(除 映射mapping 和动态数组之外的所有类型)都从位置0开始连续放置在存储storage 中。如果可能的话,存储大小少于32字节的多个变量会被打包到一个 存储插槽storage slot 中,规则如下:
1.存储插槽storage slot 的第一项会以低位对齐(即右对齐)的方式储存。
2.基本类型仅使用存储它们所需的字节。
3.如果存储插槽storage slot 中的剩余空间不足以储存一个基本类型,那么它会被移入下一个 存储插槽storage slot 。
结构体(struct)和数组数据总是会占用一整个新插槽(但结构体或数组中的各项,都会以这些规则进行打包)。


1.在使用小于 32 字节的元素(变量)时,合约的 gas 使用量可能会高于使用 32 字节的元素。这是因为 以太坊虚拟机Ethereum Virtual Machine(EVM) 每次操作 32 个字节,
所以如果元素比 32 字节小,以太坊虚拟机Ethereum Virtual Machine(EVM) 必须执行额外的操作以便将其大小缩减到到所需的大小。

2.当我们在处理状态变量时,只有当编译器会将多个元素打包到一个 存储插槽storage slot 中,使用缩减的大小(小于32字节)的变量才更有益处。因为它会将多个读或写合并为单次操作。
而在处理函数参数或 内存memory 中的值时,因为编译器不会打包这些值,所以没有什么益处。

3.最后,为了允许以太坊虚拟机Ethereum Virtual Machine(EVM) 对此进行优化,请确保 存储storage 中的变量和 struct 成员的书写顺序允许它们被紧密地打包。
例如,应该按照 uint128,uint128,uint256 的顺序来声明状态变量,而不是使用 uint128,uint256,uint128 , 因为前者只占用两个 存储插槽storage slot,而后者将占用三个。
分享到:
评论

相关推荐

    TwinCAT 2.0 使用说明(数据保存)

    本文档介绍了如何在TwinCAT 2.0环境下使用数据存储、配方和文件,这将帮助工程师快速熟悉数据的上传、下载等操作。 PLC需要保存的数据主要分为以下几类:配方、数据记录、报警记录、记数器值、位置值等。这些数据...

    labview数据采集与保存,labview数据采集与存储,LabView

    **二、数据存储** 1. **文件I/O**:LabVIEW提供了多种文件格式支持,如文本文件(.txt、.csv)、Excel文件(.xls、.xlsx)、数据库文件(.mdb、.sqlite)等,用于保存和读取数据。 2. **数据流写入**:使用LabVIEW...

    LabVIEW数据存储(TDMS).rar

    在LabVIEW中,数据存储是一项至关重要的功能,尤其在进行实验数据记录、数据分析以及系统测试等任务时。TDMS(Test Data Management System)是LabVIEW内置的一种高效的数据存储格式,它为用户提供了方便、灵活且可...

    VB6.0将数据保存为TXT文件,源代码编写

    在VB6.0中,将数据保存为TXT文件是一项常见的任务,这主要涉及到文本文件的I/O操作。本文将深入探讨如何使用Visual Basic 6.0编写源...理解这些基本概念和操作方法,可以帮助你在VB6.0项目中更高效地处理数据存储问题。

    第5章-数据存储、配方和文件

    在本章中,我们将探讨TwinCAT 2.0 PLC编程环境下的数据存储、配方功能和文件管理。这些功能对于工业自动化系统至关重要,因为它们使工程师能够持久化地存储关键参数、配方和日志数据,从而提高系统的可靠性和灵活性...

    STM32通过PVD掉电检测实现,然后读写内部flash实现掉电数据存储的代码

    STM32通过PVD掉电检测实现,然后读写内部flash实现掉电数据存储的代码

    基于Hadoop的海量数据存储平台设计与开发

    随着北部湾海洋生态资源的开发和利用,海量海洋科学数据飞速涌现出来,利用海量数据存储平台合理管理和存储这些科学数据显得极为重要.这里提出了一种基于分布式计算技术进行管理和存储海量海洋科学数据方法,构建了海量...

    LABview串口数据保存至TXT文件_labview_

    3. 数据处理:可能包含数据验证、格式转换等步骤,以适应TXT文件的存储格式。 4. 数据写入:将处理后的数据写入TXT文件,通常是在每次循环迭代结束时执行。 5. 错误处理:检查并处理可能出现的串口通信错误或文件I/O...

    基于LabVIEW的数据存储及报表设计方法

    ### 基于LabVIEW的数据存储及报表设计方法 #### 概述 随着现代计算机技术和仪器技术的深度融合,虚拟仪器(Virtual Instrument, VI)成为计算机辅助测试(Computer Aided Testing, CAT)领域的重要组成部分。虚拟...

    Android数据存储(内置sdcard1)

    在Android系统中,数据存储是应用开发者必须掌握的重要技能之一,因为这关乎到应用程序如何持久化数据,确保用户数据在程序关闭或设备重启后依然可访问。本篇将重点讨论Android内置SD卡(通常称为内部存储)的数据...

    红外解码与数据保存程序

    【红外解码与数据保存程序】是基于51单片机的一个项目,主要涉及红外遥控技术、数据处理和存储。51单片机是微控制器的一种,广泛应用于电子设备的控制中心,它拥有内置的CPU、RAM、ROM以及I/O接口。 在该项目中,...

    用户登录界面及数据保存

    总的来说,创建一个用户登录界面并实现数据保存涉及到Android的UI设计、数据存储策略、数据安全性和日志记录。通过合理利用这些技术,开发者可以构建出用户体验良好且安全的登录功能。对于初学者,理解并掌握这些...

    Labview数据保存至表格

    本主题将深入探讨如何在LabVIEW中将数据保存到表格和文件,以供后续分析或长期存储。通过提供的文件列表,我们可以看到这涉及到一个名为“添加数据到表格案例”的项目,包括配置文件、工程文件和VI(Virtual ...

    android五种数据存储方式

    SharedPreferences是一种轻量级的数据存储方式,适用于保存少量简单的键值对数据,如设置、用户偏好等。通过编辑器实例进行读写操作,支持基本类型和字符串类型的数据。数据存储在XML文件中,安全性较低,但易于...

    labview串口读取数据波形图显示,并存储

    本教程将详细讲解如何利用LabVIEW实现串口读取数据,并将这些数据实时地显示为波形图,同时进行数据存储。 一、LabVIEW串口设置 首先,我们需要配置LabVIEW的串口通信。在LabVIEW工具栏中找到“函数”面板,然后在...

    基于STM32的AD采集与SD卡数据存储

    本文讲述的基于STM32单片机实现AD(模拟数字)信号采集,并将采集到的数据存储到SD卡中,通过计算机软件读取SD卡上的文本数据转换成更易于管理的EXCEL格式的技术,具有重要的应用价值。 首先,本文阐述了基于STM32...

    android数据存储ppt课件及Demo

    在Android开发中,数据存储是不可或缺的一部分,它允许应用程序持久保存数据,以便在用户退出应用后还能恢复状态或在后续使用中访问数据。本资源"android数据存储ppt课件及Demo"提供了一个全面学习Android数据存储的...

    android 数据存储的几种方式

    在Android平台上,数据存储有多种方式,主要分为文件、数据库和网络这三大类。每种方式都有其适用的场景和特点。以下将详细介绍这几种存储方式,并针对Android平台的特定实现进行讨论。 1. SharedPreferences ...

    Android数据存储SQLite.docx

    Android 数据存储 SQLite Android 数据存储是 Android 应用程序中的一个重要组件,它负责存储和管理应用程序中的数据。在 Android 中,有多种数据存储方式,包括 SharedPreferences、内部文件存储、SD 卡存储和 ...

Global site tag (gtag.js) - Google Analytics