【问题标题】:Default buffer size of basic_filebuf within libstdc++libstdc++ 中 basic_filebuf 的默认缓冲区大小
【发布时间】:2012-05-08 05:01:19
【问题描述】:

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

也许变量被称为 extern_bufXSIZEintern_bufISIZE

【问题讨论】:

  • 我打开了basic_filebuf的头文件,看了看,默认是,哦,这是什么闪亮的新按钮?
  • 到目前为止,您是对的。谢谢!但也有点不礼貌。诚实地。我只是没有找到正确的文件来看看里面。认为它不可能是 fstream/fstream.tcc,因为我一直在寻找“basic_filebuf”!但正是这些文件我必须查看!

标签: c++ buffer


【解决方案1】:

我找到了。 C++ 从 C 中获取 BUFSIZ(请参阅 参考资料)。 fstreamfstream.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);
    }

【讨论】:

    【解决方案2】:

    8 KB

    它可能因实现而异。由于我开始了一个新的个人项目,我自己对此感到好奇。由于彼得的回答,我的搜索开始于stdio.h。一个简单的:

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

    grep -rwnl /usr/include/ -e 首先是_IO_BUFSIZ(在libio.h 中定义),然后是_G_BUFSIZ(在_G_config.h 中定义)。重新定义到此为止。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2015-06-07
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多