C++中一个关于_bufsize的难题?

最近在研究I/O缓冲,发现了一个问题,在网上搜了很久都没有答案。
先上代码:

 #include<iostream>
#include<stdio.h>
using namespace std;
int main(){
    printf("stdout buffer total size: %d\n",stdout->_bufsiz);
    printf("stdout buffer used size: %d\n",stdout->_cnt);
    cout<<"asdf";
    printf("stdout buffer total size: %d\n",stdout->_bufsiz);
    printf("stdout buffer used size: %d\n",stdout->_cnt);
    return 0;
}

问题:
1、为什么stdout->_bufsize会为0呢?不是说是4096吗??
2、cout<<"asdf",这行代码没有endl,按道理是不会强制刷新输出缓冲区的,但是为什么在第二次打印stdout->_cnt的时候,仍然为0呢?我知道很多时候,因为系统对缓冲区的自我检查,导致有没有endl,基本上效果是一样的,但是我就是想知道有没有一段代码可以证明有enld和没有endl的区别?太想知道了!!
谢谢各路大神帮忙!

用setbuf更改缓冲的类型试试

 char *a = (char *)malloc(50);
    setbuf(stdout, a);
    int i = 1;
    while(i++){
        cout << 1;
        if(i % 10 == 0)
            fflush(stdout);
        Sleep(100);
    }

答案是你的速度太慢了,stdout的对象为命令行时很快就执行完成了。