2015-08-01 2 views
-1

Прежде чем вы начнете отмечать это как дубликат, я уже прочитал this. Но это не отвечает на мой вопрос.Почему размер предопределенных объектов потока зависит от компилятора и компилятора?

Я согласен с тем, что 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'; 
} 

Выход на г ++ 4.8.1 & 4.9.2

Sizeof соиЬ объект: 140

Sizeof CIN объект: 144

Выход на Visual Studio 2010

Размер объекта cout: 80

Sizeof CIN объект: 88

Выход на интернет-компилятор (см видеодемонстрацию here)

Sizeof соиЬ объект: 272

Sizeof CIN объект: 280

Мой вопрос почему это реализация определенного поведения? Почему бы не иметь такой же размер во всех реализациях C++? Разве это не было бы, если бы они имели одинаковый размер для всех компиляторов? Мой друг сказал мне, что это решение принято из-за аппаратных & соображений производительности. Было бы очень полезно Если вы подробно объясните ответ на самом низком уровне. Как аппаратное обеспечение играет здесь роль? Как производительность может быть достигнута за счет использования разных типов размеров в разных реализациях? Почему существует столько различий в размере для cin & объектов cout в вышеупомянутой программе на разных компиляторах?

+0

@ downvoters: почему downvotes? Что не так? – Destructor

+2

Почему бы не реализовать реализацию? Почему все реализации имеют одинаковую реализацию cout/cin? Почему эти объекты должны иметь тот же размер, если даже размер базовых типов, таких как 'long', определяется реализацией? –

+4

Я не вижу смысла в вашем вопросе. Почему размер должен быть одинаковым во всех реализациях? Какие возможные выгоды могут принести? И у вас уже есть частичный ответ прямо в вашем вопросе. Вы уже понимаете, что базовые типы имеют размеры, специфичные для реализации. Но классы состоят из этих основных типов. (Кстати, я не голосовал, но думаю, что вопрос не имеет смысла.) – hvd

ответ

3

Потому что разные люди, которые разработали разные компиляторы, решили реализовать его по-разному.

Возможно, различия могут быть связаны с выбором оптимизации или под влиянием основных способов работы платформ. Но трудно сказать больше, не делая углубленного анализа самих реализаций и платформ, на которых они работают.

Если вы действительно хотите узнать больше, я думаю, вам придется самим разобраться в этих реализациях и начать спрашивать о специфике их.

+3

Я бы очень удивился, если бы что-то с таким количеством слоев, как '', было реализовано почти так же в 2 полностью независимых реализациях. Шансы очень очень минимальны. –

Смежные вопросы