有没有人知道GNU GCC中libstdc ++中basic_filebuf的默认缓冲区大小?我知道成员函数pubsetbuf(),我很确定缓冲区大小是实现定义的。在C中很简单,从<cstdio>
获取BUFSIZ。
也许变量名为 extern_buf , XSIZE , intern_buf 或 ISIZE ?
答案 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
产生了重新定义。
grep -rwnl /usr/include/ -e
_IO_BUFSIZ
(在libio.h
中定义),然后_G_BUFSIZ
(在_G_config.h
中定义)。重新定义停在那里。
grep -i _g_bufsiz /usr/include/_G_config.h