libstdc ++中basic_filebuf的默认缓冲区大小

时间:2012-04-27 12:38:33

标签: c++ buffer

有没有人知道GNU GCC中libstdc ++中basic_filebuf的默认缓冲区大小?我知道成员函数pubsetbuf(),我很确定缓冲区大小是实现定义的。在C中很简单,从<cstdio>获取BUFSIZ。

也许变量名为 extern_buf XSIZE intern_buf ISIZE

2 个答案:

答案 0 :(得分:1)

我找到了。 C ++从C获取BUFSIZ(参见参考资料)。文件 fstream fstream.tcc 包含 basic_filebuf 类。

注意:来自GCC的LIBSTDC ++

来自档案 fstream

#include <istream>
#include <ostream>
#include <bits/codecvt.h>
#include <cstdio>             // For BUFSIZ
#include <bits/basic_file.h>  // For __basic_file, __c_lock
#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <string>             // For std::string overloads.
#endif


/**
 *  Actual size of internal buffer. This number is equal to the size
 *  of the put area + 1 position, reserved for the overflow char of
 *  a full area.
 */
size_t          _M_buf_size;

来自档案 fstream.tcc

template<typename _CharT, typename _Traits>
    basic_filebuf<_CharT, _Traits>::
    basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock),
    _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(),
    _M_state_last(), _M_buf(0), _M_buf_size(BUFSIZ),
    _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(), 
    _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false),
    _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0),
    _M_ext_end(0)
    {
      if (has_facet<__codecvt_type>(this->_M_buf_locale))
    _M_codecvt = &use_facet<__codecvt_type>(this->_M_buf_locale);
    }

答案 1 :(得分:1)

8 Kilobytes

每个实施可能会有所不同。我自己很好奇,因为我开始了一个新的个人项目。我的搜索始于stdio.h因为彼得的回答。一个简单的:

cat /usr/include/stdio.h | grep -i bufsiz产生了重新定义。

首先{p> grep -rwnl /usr/include/ -e _IO_BUFSIZ(在libio.h中定义),然后_G_BUFSIZ(在_G_config.h中定义)。重新定义停在那里。

grep -i _g_bufsiz /usr/include/_G_config.h