lib/evm/opFns.js
function subMemUsage (runState, offset, length) {
  // YP (225): access with zero length will not extend the memory
  if (length.isZero()) return

  const newMemoryWordCount = offset.add(length).divCeil(new BN(32))
  if (newMemoryWordCount.lte(runState.memoryWordCount)) return

  const words = newMemoryWordCount
  const fee = new BN(runState._common.param('gasPrices', 'memory'))
  const quadCoeff = new BN(runState._common.param('gasPrices', 'quadCoeffDiv'))
  // words * 3 + words ^2 / 512
  const cost = words.mul(fee).add(words.mul(words).div(quadCoeff))

  if (cost.gt(runState.highestMemCost)) {
    subGas(runState, cost.sub(runState.highestMemCost))
    runState.highestMemCost = cost
  }

  runState.memoryWordCount = newMemoryWordCount
}
function subMemUsage (runState, offset, length) {
  // YP (225): access with zero length will not extend the memory
  if (length.isZero()) return

  const newMemoryWordCount = offset.add(length).divCeil(new BN(32))
  if (newMemoryWordCount.lte(runState.memoryWordCount)) return

  const words = newMemoryWordCount
  const fee = new BN(runState._common.param('gasPrices', 'memory'))
  const quadCoeff = new BN(runState._common.param('gasPrices', 'quadCoeffDiv'))
  // words * 3 + words ^2 / 512
  const cost = words.mul(fee).add(words.mul(words).div(quadCoeff))

  if (cost.gt(runState.highestMemCost)) {
    subGas(runState, cost.sub(runState.highestMemCost))
    runState.highestMemCost = cost
  }

  runState.memoryWordCount = newMemoryWordCount
}
function subMemUsage ( runState , offset , length ) { // YP (225): access with zero length will not extend the memory if ( length . isZero ( ) ) return const newMemoryWordCount = offset . add ( length ) . divCeil ( new BN ( 32 ) ) if ( newMemoryWordCount . lte ( runState . memoryWordCount ) ) return const words = newMemoryWordCount const fee = new BN ( runState . _common . param ( 'gasPrices' , 'memory' ) ) const quadCoeff = new BN ( runState . _common . param ( 'gasPrices' , 'quadCoeffDiv' ) ) // words * 3 + words ^2 / 512 const cost = words . mul ( fee ) . add ( words . mul ( words ) . div ( quadCoeff ) ) if ( cost . gt ( runState . highestMemCost ) ) { subGas ( runState , cost . sub ( runState . highestMemCost ) ) runState . highestMemCost = cost } runState . memoryWordCount = newMemoryWordCount }
Subtracts the amount needed for memory usage from `runState.gasLeft`
@method subMemUsage
@param {Object} runState
@param {BN} offset
@param {BN} length
@returns {String}
Subtracts the amount needed for memory usage from runState . gasLeft