Archive of the libbitcoin Slack #general channel.
~block is taking up about 95% of process time, where previously it was < 1%.racer object are passed around. One racer per block is a trivial object destruction, so inconsequential. In other words, through a coincidence of design, so far, object allocation and destruction has been very efficient. So we've got to handle this if we want block/tx/prevout caching for validation, but it also presents unforeseen optimization opportunities.std::vector<T> is not the same type as a std::vector<T, A> where A is a custom allocator. This is why std::pmr::polymorphic_allocator was introduced in C++17. While pmr types instantiated with a memory resource are polymorphic, they require a constructor parameter, and aren't polymorphic with std::vector<T>:
template <typename T>
using pmr_vector = std::vector<T, std::pmr::polymorphic_allocator<T>>;
class my_memory_resource : public std::pmr::memory_resource
{
....
}
void foo()
{
my_memory_resource mem_res;
auto my_vector = pmr_vector<int>(0, &mem_res);
std::vector<int> v;
my_vector = v;
} (edited)CFLAGS="-O3" CXXFLAGS="-O3" ./install.sh --prefix=/home/user --build-boost --enable-ndebug --disable-shared --enable-avx2 --enable-sse41src/messages/address.cpp:47:40: error: class template argument deduction failed:
47 | system::byte_reader reader{ source };
| ^
In file included from /usr/local/include/bitcoin/system/stream/streamers/bit_reader.hpp:27,
from /usr/local/include/bitcoin/system/stream/streamers/bit_flipper.hpp:27,
from /usr/local/include/bitcoin/system/stream/stream.hpp:33,
from /usr/local/include/bitcoin/system/chain/header.hpp:29,
from /usr/local/include/bitcoin/system/chain/block.hpp:26,
from /usr/local/include/bitcoin/system/chain/chain.hpp:22,
from /usr/local/include/bitcoin/system/settings.hpp:22,
from /usr/local/include/bitcoin/system.hpp:29,
from ./include/bitcoin/network/messages/address.hpp:23,
from src/messages/address.cpp:19:
/usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp: In function 'byte_reader(IStream&, libbitcoin::arena* const&)-> libbitcoin::system::byte_reader<IStream> [with IStream = libbitcoin::system::istream<>; libbitcoin::system::bytereader::memory_arena = libbitcoin::arena*]':
/usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp:44:48: error: 'static libbitcoin::arena* libbitcoin::system::byte_reader<IStream>::default_arena() [with IStream = libbitcoin::system::istream<>; libbitcoin::system::bytereader::memory_arena = libbitcoin::arena*]' is private within this context
44 | const memory_arena& arena=default_arena()) NOEXCEPT;
| ~~~~^
In file included from /usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp:229,
from /usr/local/include/bitcoin/system/stream/streamers/bit_reader.hpp:27,
from /usr/local/include/bitcoin/system/stream/streamers/bit_flipper.hpp:27,
from /usr/local/include/bitcoin/system/stream/stream.hpp:33,
from /usr/local/include/bitcoin/system/chain/header.hpp:29,
from /usr/local/include/bitcoin/system/chain/block.hpp:26,
from /usr/local/include/bitcoin/system/chain/chain.hpp:22,
from /usr/local/include/bitcoin/system/settings.hpp:22,
from /usr/local/include/bitcoin/system.hpp:29,
from ./include/bitcoin/network/messages/address.hpp:23,
from src/messages/address.cpp:19:
/usr/local/include/bitcoin/system/impl/stream/streamers/byte_reader.ipp:45:1: note: declared private here
45 | byte_reader<IStream>::default_arena() NOEXCEPT
| ^~~~~~~~
In file included from /usr/local/include/bitcoin/system/stream/streamers/bit_reader.hpp:27,
from /usr/local/include/bitcoin/system/stream/streamers/bit_flipper.hpp:27,
from /usr/local/include/bitcoin/system/stream/stream.hpp:33,
from /usr/local/include/bitcoin/system/chain/header.hpp:29,
from /usr/local/include/bitcoin/system/chain/block.hpp:26,
from /usr/local/include/bitcoin/system/chain/chain.hpp:22,
from /usr/local/include/bitcoin/system/settings.hpp:22,
from /usr/local/include/bitcoin/system.hpp:29,
from ./include/bitcoin/network/messages/address.hpp:23,
from src/messages/address.cpp:19:
/usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp:44:48: error: 'static libbitcoin::arena* libbitcoin::system::byte_reader<IStream>::default_arena() [with IStream = libbitcoin::system::istream<>; libbitcoin::system::bytereader::memory_arena = libbitcoin::arena*]' is private within this context
44 | const memory_arena& arena=default_arena()) NOEXCEPT;
| ~~~~^
In file included from /usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp:229,
from /usr/local/include/bitcoin/system/stream/streamers/bit_reader.hpp:27,
from /usr/local/include/bitcoin/system/stream/streamers/bit_flipper.hpp:27,
from /usr/local/include/bitcoin/system/stream/stream.hpp:33,
from /usr/local/include/bitcoin/system/chain/header.hpp:29,
from /usr/local/include/bitcoin/system/chain/block.hpp:26,
from /usr/local/include/bitcoin/system/chain/chain.hpp:22,
from /usr/local/include/bitcoin/system/settings.hpp:22,
from /usr/local/include/bitcoin/system.hpp:29,
from ./include/bitcoin/network/messages/address.hpp:23,
from src/messages/address.cpp:19:
/usr/local/include/bitcoin/system/impl/stream/streamers/byte_reader.ipp:45:1: note: declared private here
45 | byte_reader<IStream>::default_arena() NOEXCEPT
| ^~~~~~~~
src/messages/address.cpp:47:40: note: when instantiating default argument for call to 'byte_reader(IStream&, libbitcoin::arena* const&)-> libbitcoin::system::byte_reader<IStream> [with IStream = libbitcoin::system::istream<>; libbitcoin::system::bytereader::memory_arena = libbitcoin::arena*]'
47 | system::byte_reader reader{ source };
| ^
CXX src/messages/libbitcoin_network_la-alert_item.lo
make: * [Makefile:2352: src/messages/libbitcoin_network_la-address.lo] Error 1
make: * Waiting for unfinished jobs....
src/messages/alert.cpp: In static member function 'static libbitcoin::network::messages::alert::cptr libbitcoin::network::messages::alert::deserialize(uint32_t, const data_chunk&)':
src/messages/alert.cpp:44:40: error: class template argument deduction failed:
44 | system::byte_reader reader{ source };
| ^
In file included from /usr/local/include/bitcoin/system/stream/streamers/bit_reader.hpp:27,
from /usr/local/include/bitcoin/system/stream/streamers/bit_flipper.hpp:27,
from /usr/local/include/bitcoin/system/stream/stream.hpp:33,
from /usr/local/include/bitcoin/system/chain/header.hpp:29,
from /usr/local/include/bitcoin/system/chain/block.hpp:26,
from /usr/local/include/bitcoin/system/chain/chain.hpp:22,
from /usr/local/include/bitcoin/system/settings.hpp:22,
from /usr/local/include/bitcoin/system.hpp:29,
from ./include/bitcoin/network/messages/alert.hpp:23,
from src/messages/alert.cpp:19:
/usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp: In function 'byte_reader(IStream&, libbitcoin::arena* const&)-> libbitcoin::system::byte_reader<IStream> [with IStream = libbitcoin::system::istream<>; libbitcoin::system::bytereader::memory_arena = libbitcoin::arena*]':
/usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp:44:48: error: 'static libbitcoin::arena* libbitcoin::system::byte_reader<IStream>::default_arena() [with IStream = libbitcoin::system::istream<>; libbitcoin::system::bytereader::memory_arena = libbitcoin::arena*]' is private within this context
44 | const memory_arena& arena=default_arena()) NOEXCEPT;
| ~~~~^
In file included from /usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp:229,
from /usr/local/include/bitcoin/system/stream/streamers/bit_reader.hpp:27,
from /usr/local/include/bitcoin/system/stream/streamers/bit_flipper.hpp:27,
from /usr/local/include/bitcoin/system/stream/stream.hpp:33,
from /usr/local/include/bitcoin/system/chain/header.hpp:29,
from /usr/local/include/bitcoin/system/chain/block.hpp:26,
from /usr/local/include/bitcoin/system/chain/chain.hpp:22,
from /usr/local/include/bitcoin/system/settings.hpp:22,
from /usr/local/include/bitcoin/system.hpp:29,
from ./include/bitcoin/network/messages/alert.hpp:23,
from src/messages/alert.cpp:19:
/usr/local/include/bitcoin/system/impl/stream/streamers/byte_reader.ipp:45:1: note: declared private here
45 | byte_reader<IStream>::default_arena() NOEXCEPT
| ^~~~~~~~
In file included from /usr/local/include/bitcoin/system/stream/streamers/bit_reader.hpp:27,
from /usr/local/include/bitcoin/system/stream/streamers/bit_flipper.hpp:27,
from /usr/local/include/bitcoin/system/stream/stream.hpp:33,
from /usr/local/include/bitcoin/system/chain/header.hpp:29,
from /usr/local/include/bitcoin/system/chain/block.hpp:26,
from /usr/local/include/bitcoin/system/chain/chain.hpp:22,
from /usr/local/include/bitcoin/system/settings.hpp:22,
from /usr/local/include/bitcoin/system.hpp:29,
from ./include/bitcoin/network/messages/alert.hpp:23,
from src/messages/alert.cpp:19:
/usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp:44:48: error: 'static libbitcoin::arena* libbitcoin::system::byte_reader<IStream>::default_arena() [with IStream = libbitcoin::system::istream<>; libbitcoin::system::bytereader::memory_arena = libbitcoin::arena*]' is private within this context
44 | const memory_arena& arena=default_arena()) NOEXCEPT;
| ~~~~^
In file included from /usr/local/include/bitcoin/system/stream/streamers/byte_reader.hpp:229,
from /usr/local/include/bitcoin/system/stream/streamers/bit_reader.hpp:27,
from /usr/local/include/bitcoin/system/stream/streamers/bit_flipper.hpp:27,
from /usr/local/include/bitcoin/system/stream/stream.hpp:33,
from /usr/local/include/bitcoin/system/chain/header.hpp:29,
from /usr/local/include/bitcoin/system/chain/block.hpp:26,
from /usr/local/include/bitcoin/system/chain/chain.hpp:22,
from /usr/local/include/bitcoin/system/settings.hpp:22,
from /usr/local/include/bitcoin/system.hpp:29,
from ./include/bitcoin/network/messages/alert.hpp:23,
from src/messages/alert.cpp:19:
/usr/local/include/bitcoin/system/impl/stream/streamers/byte_reader.ipp:45:1: note: declared private here
45 | byte_reader<IStream>::default_arena() NOEXCEPT
| ^~~~~~~~
src/messages/alert.cpp:44:40: note: when instantiating default argument for call to 'byte_reader(IStream&, libbitcoin::arena* const&)-> libbitcoin::system::byte_reader<IStream> [with IStream = libbitcoin::system::istream<>; libbitcoin::system::bytereader::memory_arena = libbitcoin::arena*]'
44 | system::byte_reader reader{ source };
| ^
make: * [Makefile:2366: src/messages/libbitcoin_network_la-alert.lo] Error 1
real 11m29.040s
user 31m51.719s
sys 2m16.342ssse41 introduced in https://github.com/libbitcoin/libbitcoin-system/pull/1502