为什么预定义流对象的大小因编译器而异
Why sizeof predefined stream objects varies from compiler to compiler?
在你们开始把这篇文章标记为重复之前,我已经读过了。但它没有回答我的问题。
我同意sizeof(int)是C &c++。但是当我在不同的编译器上测试下面的程序时,我感到很惊讶。
#include <iostream>
using std::cout;
int main()
{
cout << "Sizeof cout object: " << sizeof(cout) << 'n';
cout << "Sizeof cin object: " << sizeof(std::cin) << 'n';
}
g++ 4.8.1 &4.9.2
size: 140
Sizeof cin object: 144
Visual Studio 2010的输出
size: 80
Sizeof cin object: 88
在线编译器的输出(参见这里的实时演示)
Sizeof cout object: 272
size: 280
我的问题是为什么它是实现定义的行为?为什么不在c++的所有实现上都有相同的大小?如果它们在所有编译器上都有相同的大小,不是吗?我的朋友告诉我,这个决定是由于硬件& &;性能的原因。如果你能在最低层次上深入解释答案,那将会很有帮助。硬件在这里扮演什么角色?如何通过在不同的实现上使用不同大小的类型来获得性能?为什么在尺寸上有这么大的差异?在各种编译器上的上述程序的Cout对象?
因为开发不同编译器的不同的人决定以不同的方式实现它。
也许这些差异可能是由于优化的选择或受平台工作方式的影响。但是,如果不深入分析实现本身及其运行的平台,就很难说得更多。
如果你真的想知道更多,我认为你必须自己深入研究那些实现,并开始询问它们的细节。
相关文章:
- __CHAR_BIT__宏是否为 MSVC 编译器预定义?
- 在哪里定义了预定义'user-defined'文本"m"的标准库?
- 编译器如何定义type_traits中的类?
- 编译器说定义的函数是虚拟的
- 如何打印预定义的cflags
- Cygwin 编译器:未定义的引用
- 编译器预处理过程中的数学操作
- 为什么编译器没有定义__ARM_FEATURE_RC32
- 适用于 64 位系统的预定义宏
- 为什么编译器在定义类似的模板专用化时不会出错?
- visual 是 -Dfoobar 为所有编译器添加定义的标准C++
- 如何在各种编译器中定义 __cplusplus 指令
- 如何预定义<atomic>变量?
- 在不同的编译器中定义程序集上的函数
- C++ 隐式声明的编译器错误定义
- ncurses & curses - 编译器未定义引用
- 将文本文件中的特定单词:C++替换为预定义值
- 在不使用预定义的C++函数的情况下,按字母顺序打印存储在哈希表中每个索引处的名称
- 两个值的最大值,其中一个不能等于预定义值
- 将char转换为预定义的ascii值