У меня есть этот контракт с этими функциями, почему каждый из них использует разное количество газа?
pragma solidity 0.4.24;
contract Foo {
//transaction cost: 21471 gas
//execution cost: 199 gas
//total cost: 21670 gas
function withoutNewS() external {
uint256[3] storage data;
}
//transaction cost: 21427 gas
//execution cost: 155 gas
//total cost: 21582 gas
function withoutNew() external {
uint256[3] data;
}
//transaction cost: 21533 gas
//execution cost: 261 gas
//total cost: 21794 gas
function withoutNewM() external {
uint256[3] memory data;
}
//transaction cost: 21607 gas
//execution cost: 335 gas
//total cost: 21942 gas
function withNewM() external {
uint256[] memory data = new uint256;
}
}
Это связано с тем, что вы используете разные области памяти EVM (память и хранилище имеют очень разные значения и последствия, как вы можете видеть здесь, например). Эти различные элементы имеют разные цели, и вы всегда должны стремиться к тому, который наименее потребляет газ, но при этом подходит для вашей цели, поскольку EVM вознаграждает тщательно оптимизированный код с меньшими затратами.