社区
C++ 语言
帖子详情
关于输入输出缓冲区问题
wpalhm
2007-11-22 10:47:30
请问:
c++中输入输出缓冲区的实现原理?
比如是不是每一次cout都去申请一个缓冲区?那缓冲区又与屏幕的显示如何联系的?
比如这样一段代码:
int i(0);
cout << i << " " << i++ << endl;
这里的cout先执行i++,得到了一个值(0),是在这个时候把值存入的缓冲区吗?
一般缓冲适于分批量的小数据输入输出.那么大的数据输入输出又当如何实现呢?
...全文
575
24
打赏
收藏
关于输入输出缓冲区问题
请问: c++中输入输出缓冲区的实现原理? 比如是不是每一次cout都去申请一个缓冲区?那缓冲区又与屏幕的显示如何联系的? 比如这样一段代码: int i(0); cout << i << " " << i++ << endl; 这里的cout先执行i++,得到了一个值(0),是在这个时候把值存入的缓冲区吗? 一般缓冲适于分批量的小数据输入输出.那么大的数据输入输出又当如何实现呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wvhuihui
2012-10-21
打赏
举报
回复
飘过 看看大神么在干什么……
yjugdujcm
2011-03-15
打赏
举报
回复
顶下,不太懂啊
cj_041370
2010-04-27
打赏
举报
回复
那么接近机器本身的东西
都不用高级语言实现的
cj_041370
2010-04-27
打赏
举报
回复
c++中输入输出缓冲区的实现原理?
其实是利用 硬件程序的接口实现的
输入输出缓冲区的实现在汇编
wpalhm
2007-11-26
打赏
举报
回复
再顶一下吧。
mu_yang
2007-11-26
打赏
举报
回复
这帖子有点意思
jxcui
2007-11-26
打赏
举报
回复
感觉14楼说的有道理
wpalhm
2007-11-25
打赏
举报
回复
难道都没一个人能给我一个确切(通俗易懂)一点的答案吗?
herman~~
2007-11-23
打赏
举报
回复
mark一个
输入输出的实现原理确实还没研究过,有空再回来看看
wpalhm
2007-11-23
打赏
举报
回复
怎么一个一个都不一样.到底谁是对的..
PcrazyC
2007-11-23
打赏
举报
回复
int i=0
cout<<i<<i++;
就以这段代码为例,假设A是缓存区,首先遇到第一个"<<",&I入队列,然后遇到第二个<<,同样&I入队列,由于I++是先用后加,所以先将I输出,然后再加,也就是输出00,然后I=I+1;
如果是下面的就应该输出11了
int i=0
cout<<i<<++i;
一般的编译器都是这样处理的,可能有些编译器不这么处理 ,这个我就不清楚了
wpalhm
2007-11-23
打赏
举报
回复
还是不清楚.能不能讲详细点.
wpalhm
2007-11-22
打赏
举报
回复
如果猜测输出流是一个堆栈.
那么根据堆栈(先进后出).对这样的代码:
cout < < i < < " " < < i++ < < endl;
会有这样的解释:
同样先把i++得到的值(0)放入缓冲区(队列)中,然后是 " ",然后是i的值(1).最后去中断显示到屏幕.
那么缓冲区的数据应该是这样:
1 " " 0 (endl)
(进去)---->
<------(出去)
按照先进后出,1先出去,然后是" ",然后是0.
结果就是:1 0
这个似乎可以和输出结果一致,但是还有个问题,这里的endl呢?又当做如何解释.
操纵符endl写入到输出流时,具有输出换行的效果,并刷新与设备相关的缓冲区.
这里遇到endl的时候.到底是由endl去中断的,还是由中断时来处理endl;
wpalhm
2007-11-22
打赏
举报
回复
不是很懂啊!
A:我们大胆猜测它是一个队列,在队满,强制等条件所有数据出队。缓冲区解决了数据在输出到终端时可能造成的无序问题
这里提到缓冲区是队列.
那么应该是先进现出了.
A:在通常情况,cout会将值先写入缓冲区,这是并没有输出到终端,等达到缓冲区刷新条件时,通过中断系统调用来输出到屏幕,或者其他终端
对这样的代码做何解释:
cout << i << " " << i++ << endl;
按照你的意思是不是这样:
先把i++得到的值(0)放入缓冲区(队列)中,然后是" ",然后是i的值(1).最后去中断显示到屏幕.
那么缓冲区的数据应该是这样:
1 " " 0
按照先进现出,0先出来,然后是" ",然受是1.那么显示结果应该是:0 1
这显然与结果不一致:1 0
飞哥
2007-11-22
打赏
举报
回复
不能的 -> 不停的
飞哥
2007-11-22
打赏
举报
回复
c++中输入输出缓冲区的实现原理?
A:我们大胆猜测它是一个队列,在队满,强制等条件所有数据出队。缓冲区解决了数据在输出到终端时可能造成的无序问题
比如是不是每一次cout都去申请一个缓冲区?那缓冲区又与屏幕的显示如何联系的?
比如这样一段代码:
int i(0);
cout < < i < < " " < < i++ < < endl;
这里的cout先执行i++,得到了一个值(0),是在这个时候把值存入的缓冲区吗?
A:在通常情况,cout会将值先写入缓冲区,这是并没有输出到终端,等达到缓冲区刷新条件时,通过中断系统调用来输出到屏幕,或者其他终端
A:一般缓冲适于分批量的小数据输入输出.那么大的数据输入输出又当如何实现呢?
好像缓冲区大小没有什么限制,是系统提供的库函数做了限制,达到一定数据量即刷新数据,针对大数据量的数据需要考虑到输出造成的性能问题,如果你不考虑这一点,很显然,按照相同的方式输出是没有问题的,只不过会造成系统不能的进行中断处理,(这个比函数调用开销大的多),所以不建议输出大量信息,可以通过其他方式处理。针对具体的问题具体分析
wpalhm
2007-11-22
打赏
举报
回复
谢谢你的解答.
可是不是很懂.能清楚点吗?
zhangyanli
2007-11-22
打赏
举报
回复
其实这些都是作为参数传入cout的成员operator<<函数的参数,好像再建立流对象的时候建立缓冲区。缓冲区慢的话,输出。
这里的顺序是有些问题,最起码和我们想象的有些出入。比如先i++,
如果是比较大的对象,那也这样输出,只要它可以传给operator<<,一般需要在类里重载operator<<,输出过程和一般的没什么区别
飞哥
2007-11-22
打赏
举报
回复
如果数据量大中断很耗资源,开销太大,可以通过其他方式输出(? 如果可以不输出就不输出,写文件也比输出省资源)
飞哥
2007-11-22
打赏
举报
回复
若果每次都申请一个缓冲区,那就不叫缓冲了吧
先把值写到缓冲区,还没到屏幕,然后使用endl刷新缓冲区
强制将数据送到屏幕,通过中断实现
加载更多回复(4)
关于C语言
输入输出
缓冲区
问题
C语言
输入输出
缓冲区
c语言怎么清空标准输入
缓冲区
,C语言中如何清空
输入输出
缓冲区
C语言中如何清空
输入输出
缓冲区
答案:5信息版本:手机版解决时间 2019-10-06 09:40已解决2019-10-05 13:54C语言中如何清空
输入输出
缓冲区
最佳答案2019-10-05 15:11最简单的是用fflush()函数。此函数包含在stdio.h...
输出
缓冲区
和输入
缓冲区
程序输入的数据并不能立即显示在屏幕上,而是先存储在输出
缓冲区
中,满足一些条件后才显示出来。 1、遇到\n后 2、遇到输入语句 3、当输出
缓冲区
满4K 4、当程序结束 5、手动刷新 fflsuh(stdout)
缓冲区
机制可以提高...
C语言简介之 输出
缓冲区
、输入
缓冲区
输出
缓冲区
: 程序并不会立即把输出的数据显示到屏幕上,而是先存储在输出
缓冲区
中,当满足一定条件时才显示出来 1、遇到\n 2、程序结束 #include <unistd.h> sleep(3); 3...
详解,c/c++
输入输出
缓冲区
,以及scanf回车的
问题
输出
缓冲区
大小是和图像一样的,用宽高来定义的,换句话说输出
缓冲区
就相当于一个小型屏幕,而屏幕的宽高由操作系统指定/用户,我们可以将我们程序运行时的一些数据输入到此
缓冲区
中,在屏幕中显示出来,列如...
C++ 语言
64,662
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章