boost::asio::buffer() 在BOOST SOCKET 中写时是否多做了一次拷贝?

su_yh 发布于 2016/05/03 17:19
阅读 414
收藏 0

我们在使用BOOST SOCKET 时,当在一个连接上写数据时,总是将要写的字节流通过boost::asio::buffer() 封装起来然后将返回值做为参数传递给写函数(比如:boost::asio::async_write())。

但是对这个boost::asio::buffer() 函数有个问题就是,它到底是直接将指针保存了起来还是将数据拷贝了一遍呢?我看了下源代码,但是很简单,没看出来什么,所以有些迷糊。

另外该函数(boost::asio::buffer()) 它的返回值我也看了,但返回的类,似乎没有什么接口可以调用的。它的意思难道就没准备给我们用吗?

还请不吝赐教!

加载中
0
su_yh
su_yh

哦,看到了。boost::asio::buffer() 函数返回了一个叫boost::asio::mutable_buffers_1 的实例。这个类继承自boost::asio::mutable_buffer,而这个mutable_buffer 中有两个成员变量,分别是:void* data_;  std::size_t size_; 还有一个成员变量是一个函数实例 boost::asio::detail::function<void()> debug_check_;  不过这个函数实例在一个宏定义的控制下,不知有什么意义,但它应该不是重点,也无需去理会。

boost::asio::mutable_buffer 类的构造函数来看,它只是保存了缓冲区的指针而,所以这里并没有对写的数据进行拷贝,所以在效率上并没有影响。

返回顶部
顶部