Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы компилятора Microsoft 
V
    Опции темы
ecspertiza
Дата 19.5.2010, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Гуру программеры, объясните мне пожалуйста мне кажется или Microsoft плевала на стандарты?

Есть два компилятора MinGW на базе gcc 4.4.1 и Visual Studio 2008

есть структура данных (это к примеру)

Код

struct s
{
    int i;
    char *q;
    int j;
};


если компилить под MinGW то ф-ция sizeof(s) вернет 16 ,а если скомпилить под студией то почему то 56, это с чего так вдруг?  


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
GoldFinch
Дата 19.5.2010, 20:57 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



ecspertiza, я тоже хотел бы знать где вы там взяли 56

алсо о каких стандартах речь? в стандарте языка не определено выравнивание
PM MAIL ICQ   Вверх
ecspertiza
Дата 19.5.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Я структуру привел просто для примера, холивар тоже разводить не хочу, просто интересно с какой стати?

вот точный код который выводит так инфу

Код

#include <iostream>
#include <time.h>

struct bus_info {
        bus_info() {
                num = 0;
                in = out = 0;
        }
        int num;
        std::string punkt;
        time_t out;
        time_t in;
};

int main(int argc, char *argv[])
{
    std::cout << "size " << sizeof(bus_info) << std::endl;

    return 0;
}


получается что C++ от мелкомягких отличается от общечеловеческого?



--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
djamshud
Дата 19.5.2010, 21:21 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



ecspertiza, получается, что в гцц и мсцпп стлевская строка по-разному реализована.

Добавлено через 1 минуту и 8 секунд
>получается что C++ от мелкомягких отличается от общечеловеческого?

Общечеловеческий - это который аж на одном проценте десктопов? :)


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
ecspertiza
Дата 19.5.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Цитата(djamshud @  19.5.2010,  21:21 Найти цитируемый пост)
Общечеловеческий - это который аж на одном проценте десктопов? smile 


Просто порой возникает ощущение что C++ и Visual С++ это вообще два разных языка программирования, общечеловеческий это тот на котором можно написать софтину и без болезненно перенести на другую платформу.

Это сообщение отредактировал(а) ecspertiza - 19.5.2010, 21:39


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
djamshud
Дата 19.5.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



ecspertiza, это ну никак не про гцц. А вот интеловский компилятор стандартам следует весьма строго.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 19.5.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



ecspertiza, 
видимо у вас настроки "Debug".
в этом случае в string включаются дополнительные отладочные члены.

возможно msvc также выделяет место для коротких строк (не уверен)

Добавлено через 1 минуту и 3 секунды
в любом случае, стандарт ничего не говорит про размер string
PM MAIL ICQ   Вверх
ecspertiza
Дата 19.5.2010, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Цитата(GoldFinch @  19.5.2010,  21:43 Найти цитируемый пост)
ecspertiza, 
видимо у вас настроки "Debug".
в этом случае в string включаются дополнительные отладочные члены.


Да действительно в релиз версии, размер структуры 48.


Цитата(djamshud @  19.5.2010,  21:40 Найти цитируемый пост)
ecspertiza, это ну никак не про гцц. А вот интеловский компилятор стандартам следует весьма строго. 


Ну у меня с ним никогда проблем не возникало. А интеловский компилятор под разные платформы? и интересует как он завется.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
djamshud
Дата 19.5.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



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

http://software.intel.com/en-us/intel-compilers/


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
ecspertiza
Дата 19.5.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Жаль что на переносимость расчитывать не приходится, в любом случае спасибо за разъяснение.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
GoldFinch
Дата 19.5.2010, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



используя intel compiler,  надо учитывать что он генерит плохой код для AMD
PM MAIL ICQ   Вверх
djamshud
Дата 19.5.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



GoldFinch, ага. Я его привел в качестве примера очень педантичного компилятора. Еще он очень медленный, и как показали недавние исследования у gcc выигрывал немного только в паре тестов, в остальном - примерно на равных.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 19.5.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



вставлю своих пять копеек: sizeof(std::string) никак не обязан быть как-то стандартным значением.
а вообще, применять sizeof() можно не ко всем типам...далеко не ко всем.

PM WWW   Вверх
djamshud
Дата 19.5.2010, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



boostcoder, можно пример типа, к которму низя применить sizeof?


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 19.5.2010, 22:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



djamshud, 
Код

A* p = new B();
sizeof(*p);

PM MAIL ICQ   Вверх
djamshud
Дата 19.5.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



GoldFinch, *p в данном случае не тип, и понятно, что компилятор даст размер типа А.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
SVN74
Дата 19.5.2010, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



в Turbo C++ тоже 56 байт...
сам std::string = 40 байт
PM MAIL WWW   Вверх
boostcoder
Дата 19.5.2010, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(djamshud @  19.5.2010,  22:51 Найти цитируемый пост)
можно пример типа, к которму низя применить sizeof? 

не нужно придираться к словам.
в строчке выше, описанной, что я имел ввиду.
PM WWW   Вверх
djamshud
Дата 19.5.2010, 23:07 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



boostcoder, на практике такие строчки пишут только идиоты.

Добавлено @ 23:11
>а вообще, применять sizeof() можно не ко всем типам...далеко не ко всем.

То есть, если в вас вселился кэп, и вы хотели сказать "sizeof можно применять далеко не ко всякой неведомой ...", то да. Я же честно интересовался, к какому типу низя ее применить.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 19.5.2010, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(djamshud @  19.5.2010,  23:07 Найти цитируемый пост)
То есть, если в вас вселился кэп, и вы хотели сказать "sizeof можно применять далеко не ко всякой неведомой ...", то да. Я же честно интересовался, к какому типу низя ее применить.

вы хам.
PM WWW   Вверх
GoldFinch
Дата 20.5.2010, 00:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



djamshud, sizeof применяется не толко к типам, но и к выражениям.
но чтобы вас успокоить, я напишу
Код

A* p = new B();
sizeof(typeof(*p)); 
// или sizeof(decltype(*p));
// или sizeof(BOOST_TYPEOF(*p));

PM MAIL ICQ   Вверх
djamshud
Дата 20.5.2010, 00:21 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



GoldFinch, меня не надо успокаивать, я расслаблен и не напряжен. И я знаю, к чему применяется sizeof. Но он дает результат о размере типа, а не о размере объекта, потому что обрабатывается на момент компиляции, а typeof(*p)==A. Впрочем ты это и так прекрасно понимаешь, не вижу смысла толочь воду в ступе. И если же кто-то таким образом сообразил получить информацию о размере объекта в рантайме, он клинический идиот.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Earnest
Дата 20.5.2010, 07:46 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Г-да программеры, сбавьте тон, пока не началось... Эк на вас в ночи накатило  smile 
Все хорошо, sizeof нормальный оператор, применяйте на здоровье. Даже если глупость какую напишите, никто особо не пострадает.
 smile 


--------------------
...
PM   Вверх
GoldFinch
Дата 20.5.2010, 09:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Цитата(djamshud @  20.5.2010,  01:21 Найти цитируемый пост)
И если же кто-то таким образом сообразил получить информацию о размере объекта в рантайме, он клинический идиот. 

а все потому, что 
Цитата(boostcoder @  19.5.2010,  23:49 Найти цитируемый пост)
применять sizeof() можно не ко всем типам...далеко не ко всем.


PM MAIL ICQ   Вверх
ecspertiza
Дата 20.5.2010, 10:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Нужно закрывать тему, а то еще подеретесь smile


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
djamshud
Дата 20.5.2010, 11:27 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



GoldFinch, ты тролль. И мне плевать на твою аллергию. Еще раз
>применять sizeof() можно не ко всем типам...далеко не ко всем.
никак не связано с истинной мыслью автора про неведомую ... . Развели блин демагогию.

Это сообщение отредактировал(а) djamshud - 20.5.2010, 11:27


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
xvr
Дата 20.5.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Какое отношение имеет применимость sizeof от чего бы то не было к теме топика (напоминаю - 'Проблемы компилятора Microsoft')?


M
xvr
Щас разберусь как следует и накажу кого попало  :-D



Это сообщение отредактировал(а) xvr - 20.5.2010, 12:19
PM MAIL   Вверх
azesmcar
Дата 20.5.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



ecspertiza

Один и тот же C++ код не должен работать одинаково на разных платформах и компиляторах, для этого в стандарте есть оговорка - implementation defined, т.е. зависит от реализации, размер int -а зависит от реализации, если нужно именно 32-х битное число то можно использовать скажем boost::int32_t, либо определять свой тип. Также со всем остальным, писать переносимый код не так-то просто.

У компилятора микрософт (и не только у него) конечно же есть проблемы, но это не одна из них.

Это сообщение отредактировал(а) azesmcar - 20.5.2010, 12:05
PM   Вверх
ecspertiza
Дата 20.5.2010, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 1
Всего: 5



Спасибо еще раз, за разъяснение, то есть я теперь уже так понимаю, что к изучению C++ нужно подходить примерно так, сначала изучать какие то фишки общие для всех компиляторов, а потом уже особенности тех компиляторов которые собираешься использовать (и стараться не ругаться в этот момент) smile  


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0724 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.