Merge #8330: Structure Packing Optimizations in C{,Mutable}Transaction

37495e0d8 Reorder C{,Mutable}Transaction for better packing (Jeremy Rubin)

Pull request description:

  These commits revise the layout of a few key classes to eliminate padding, eliminating useless memory overhead.

  -This reduces CTransaction from 96 bytes to 88 bytes

Tree-SHA512: 91d1fec363edebbb1f1a5b98142c767511e99d3be857148a76e31cc512c9ab3d153083fa6b46b6407974d3b88de984b436c33e8606fbb2b273d74c825195aa17
This commit is contained in:
Wladimir J. van der Laan 2017-09-06 20:14:36 +02:00
commit 59e17899a7
No known key found for this signature in database
GPG key ID: 1E4AED62986CD25D
2 changed files with 6 additions and 6 deletions

View file

@ -55,7 +55,7 @@ std::string CTxOut::ToString() const
} }
CMutableTransaction::CMutableTransaction() : nVersion(CTransaction::CURRENT_VERSION), nLockTime(0) {} CMutableTransaction::CMutableTransaction() : nVersion(CTransaction::CURRENT_VERSION), nLockTime(0) {}
CMutableTransaction::CMutableTransaction(const CTransaction& tx) : nVersion(tx.nVersion), vin(tx.vin), vout(tx.vout), nLockTime(tx.nLockTime) {} CMutableTransaction::CMutableTransaction(const CTransaction& tx) : vin(tx.vin), vout(tx.vout), nVersion(tx.nVersion), nLockTime(tx.nLockTime) {}
uint256 CMutableTransaction::GetHash() const uint256 CMutableTransaction::GetHash() const
{ {
@ -76,9 +76,9 @@ uint256 CTransaction::GetWitnessHash() const
} }
/* For backward compatibility, the hash is initialized to 0. TODO: remove the need for this default constructor entirely. */ /* For backward compatibility, the hash is initialized to 0. TODO: remove the need for this default constructor entirely. */
CTransaction::CTransaction() : nVersion(CTransaction::CURRENT_VERSION), vin(), vout(), nLockTime(0), hash() {} CTransaction::CTransaction() : vin(), vout(), nVersion(CTransaction::CURRENT_VERSION), nLockTime(0), hash() {}
CTransaction::CTransaction(const CMutableTransaction &tx) : nVersion(tx.nVersion), vin(tx.vin), vout(tx.vout), nLockTime(tx.nLockTime), hash(ComputeHash()) {} CTransaction::CTransaction(const CMutableTransaction &tx) : vin(tx.vin), vout(tx.vout), nVersion(tx.nVersion), nLockTime(tx.nLockTime), hash(ComputeHash()) {}
CTransaction::CTransaction(CMutableTransaction &&tx) : nVersion(tx.nVersion), vin(std::move(tx.vin)), vout(std::move(tx.vout)), nLockTime(tx.nLockTime), hash(ComputeHash()) {} CTransaction::CTransaction(CMutableTransaction &&tx) : vin(std::move(tx.vin)), vout(std::move(tx.vout)), nVersion(tx.nVersion), nLockTime(tx.nLockTime), hash(ComputeHash()) {}
CAmount CTransaction::GetValueOut() const CAmount CTransaction::GetValueOut() const
{ {

View file

@ -278,9 +278,9 @@ public:
// actually immutable; deserialization and assignment are implemented, // actually immutable; deserialization and assignment are implemented,
// and bypass the constness. This is safe, as they update the entire // and bypass the constness. This is safe, as they update the entire
// structure, including the hash. // structure, including the hash.
const int32_t nVersion;
const std::vector<CTxIn> vin; const std::vector<CTxIn> vin;
const std::vector<CTxOut> vout; const std::vector<CTxOut> vout;
const int32_t nVersion;
const uint32_t nLockTime; const uint32_t nLockTime;
private: private:
@ -361,9 +361,9 @@ public:
/** A mutable version of CTransaction. */ /** A mutable version of CTransaction. */
struct CMutableTransaction struct CMutableTransaction
{ {
int32_t nVersion;
std::vector<CTxIn> vin; std::vector<CTxIn> vin;
std::vector<CTxOut> vout; std::vector<CTxOut> vout;
int32_t nVersion;
uint32_t nLockTime; uint32_t nLockTime;
CMutableTransaction(); CMutableTransaction();