有谁知道来自 GNU GCC 的 libstdc++ 中 basic_filebuf 的默认缓冲区大小?我知道成员函数 pubsetbuf() 并且我很确定缓冲区大小是实现定义的。在 C 中很简单,从<cstdio>
.
也许变量被称为extern_buf、XSIZE、intern_buf或ISIZE?
我找到了。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);
}
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