Opened 9 years ago
Closed 9 years ago
#8624 closed Bugs (fixed)
Large objects passed by value
| Reported by: | Owned by: | chris_kohlhoff | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | asio |
| Version: | Boost 1.52.0 | Severity: | Optimization |
| Keywords: | Cc: |
Description
In asio/detail/reactive_socket_service_base.hpp:
198 template <typename ConstBufferSequence, typename Handler>
199 void async_send(base_implementation_type& impl,
200 const ConstBufferSequence& buffers,
CID 10918 (#1-5 of 5): Big parameter passed by value (PASS_BY_VALUE)
pass_by_value: Passing parameter handler of type
boost::asio::detail::write_op<
boost::asio::basic_stream_socket<
boost::asio::ip::tcp,
boost::asio::stream_socket_service<boost::asio::ip::tcp>
>,
boost::asio::mutable_buffers_1,
boost::asio::detail::transfer_all_t,
boost::asio::ssl::detail::io_op<
boost::asio::basic_stream_socket<
boost::asio::ip::tcp,
boost::asio::stream_socket_service<boost::asio::ip::tcp>
>,
boost::asio::ssl::detail::write_op<
boost::asio::detail::consuming_buffers<
boost::asio::const_buffer,
std::vector<boost::asio::const_buffer>
>
>,
boost::asio::detail::write_op<
boost::asio::ssl::stream<
boost::asio::basic_stream_socket<
boost::asio::ip::tcp,
boost::asio::stream_socket_service<boost::asio::ip::tcp>
>
>,
std::vector<boost::asio::const_buffer>,
boost::asio::detail::transfer_all_t,
boost::function2<void, boost::system::error_code const &, unsigned long>
>
>
> (size 256 bytes) by value.
201 socket_base::message_flags flags, Handler handler)
202 {
Same for async_receive.
In asio/handler_invoke_hook.hpp:
61 template <typename Function>
CID 10407 (#1-12 of 12): Big parameter passed by value (PASS_BY_VALUE)
pass_by_value: Passing parameter function of type
boost::asio::detail::binder2<
boost::asio::detail::write_op<
boost::asio::basic_stream_socket<
boost::asio::ip::tcp,
boost::asio::stream_socket_service<boost::asio::ip::tcp>
>,
std::vector<boost::asio::const_buffer>,
boost::asio::detail::transfer_all_t,
boost::function2<void, boost::system::error_code const &, unsigned long>
>,
boost::system::error_code, unsigned long
> (size 136 bytes) by value.
62 inline void asio_handler_invoke(Function function, ...)
In asio/impl/write.hpp:
548 template <typename AsyncWriteStream, typename ConstBufferSequence,
549 typename CompletionCondition, typename WriteHandler>
550 inline write_op<AsyncWriteStream, ConstBufferSequence,
551 CompletionCondition, WriteHandler>
552 make_write_op(AsyncWriteStream& s, const ConstBufferSequence& buffers,
CID 10920 (#1-3 of 3): Big parameter passed by value (PASS_BY_VALUE)
pass_by_value: Passing parameter handler of type
boost::asio::ssl::detail::io_op<
boost::asio::basic_stream_socket<
boost::asio::ip::tcp,
boost::asio::stream_socket_service<boost::asio::ip::tcp>
>,
boost::asio::ssl::detail::write_op<
boost::asio::detail::consuming_buffers<
boost::asio::const_buffer,
std::vector<boost::asio::const_buffer>
>
>,
boost::asio::detail::write_op<
boost::asio::ssl::stream<
boost::asio::basic_stream_socket<
boost::asio::ip::tcp,
boost::asio::stream_socket_service<boost::asio::ip::tcp>
>
>,
std::vector<boost::asio::const_buffer>,
boost::asio::detail::transfer_all_t,
boost::function2<void, boost::system::error_code const &, unsigned long>
>
> (size 224 bytes) by value.
553 CompletionCondition completion_condition, WriteHandler handler)
554 {
555 return write_op<AsyncWriteStream, ConstBufferSequence, CompletionCondition,
556 WriteHandler>(s, buffers, completion_condition, handler);
557 }
Note:
See TracTickets
for help on using tickets.

Fixes on trunk in [85749] and [85763]. Merged to release in [85838].
N.B. some copies are unavoidable in C++03 due to the need to obtain a non-const handler object. In C++11 most of these instances can use move construction rather than copy construction.