![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Гуру программеры, объясните мне пожалуйста мне кажется или Microsoft плевала на стандарты?
Есть два компилятора MinGW на базе gcc 4.4.1 и Visual Studio 2008 есть структура данных (это к примеру)
если компилить под MinGW то ф-ция sizeof(s) вернет 16 ,а если скомпилить под студией то почему то 56, это с чего так вдруг? |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
ecspertiza, я тоже хотел бы знать где вы там взяли 56
алсо о каких стандартах речь? в стандарте языка не определено выравнивание |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Я структуру привел просто для примера, холивар тоже разводить не хочу, просто интересно с какой стати?
вот точный код который выводит так инфу
получается что C++ от мелкомягких отличается от общечеловеческого? |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
ecspertiza, получается, что в гцц и мсцпп стлевская строка по-разному реализована.
Добавлено через 1 минуту и 8 секунд >получается что C++ от мелкомягких отличается от общечеловеческого? Общечеловеческий - это который аж на одном проценте десктопов? :) -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Просто порой возникает ощущение что C++ и Visual С++ это вообще два разных языка программирования, общечеловеческий это тот на котором можно написать софтину и без болезненно перенести на другую платформу. Это сообщение отредактировал(а) ecspertiza - 19.5.2010, 21:39 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
ecspertiza, это ну никак не про гцц. А вот интеловский компилятор стандартам следует весьма строго.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
ecspertiza,
видимо у вас настроки "Debug". в этом случае в string включаются дополнительные отладочные члены. возможно msvc также выделяет место для коротких строк (не уверен) Добавлено через 1 минуту и 3 секунды в любом случае, стандарт ничего не говорит про размер string |
|||
|
||||
| ecspertiza |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Да действительно в релиз версии, размер структуры 48.
Ну у меня с ним никогда проблем не возникало. А интеловский компилятор под разные платформы? и интересует как он завется. |
||||
|
|||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Жаль что на переносимость расчитывать не приходится, в любом случае спасибо за разъяснение.
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
используя intel compiler, надо учитывать что он генерит плохой код для AMD
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
GoldFinch, ага. Я его привел в качестве примера очень педантичного компилятора. Еще он очень медленный, и как показали недавние исследования у gcc выигрывал немного только в паре тестов, в остальном - примерно на равных.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вставлю своих пять копеек: sizeof(std::string) никак не обязан быть как-то стандартным значением.
а вообще, применять sizeof() можно не ко всем типам...далеко не ко всем. |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
boostcoder, можно пример типа, к которму низя применить sizeof?
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
djamshud,
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
GoldFinch, *p в данном случае не тип, и понятно, что компилятор даст размер типа А.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
в Turbo C++ тоже 56 байт...
сам std::string = 40 байт |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не нужно придираться к словам. в строчке выше, описанной, что я имел ввиду. |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
djamshud, sizeof применяется не толко к типам, но и к выражениям.
но чтобы вас успокоить, я напишу
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Г-да программеры, сбавьте тон, пока не началось... Эк на вас в ночи накатило
Все хорошо, sizeof нормальный оператор, применяйте на здоровье. Даже если глупость какую напишите, никто особо не пострадает. -------------------- ... |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Нужно закрывать тему, а то еще подеретесь
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Какое отношение имеет применимость sizeof от чего бы то не было к теме топика (напоминаю - 'Проблемы компилятора Microsoft')?
Это сообщение отредактировал(а) xvr - 20.5.2010, 12:19 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
ecspertiza
Один и тот же C++ код не должен работать одинаково на разных платформах и компиляторах, для этого в стандарте есть оговорка - implementation defined, т.е. зависит от реализации, размер int -а зависит от реализации, если нужно именно 32-х битное число то можно использовать скажем boost::int32_t, либо определять свой тип. Также со всем остальным, писать переносимый код не так-то просто. У компилятора микрософт (и не только у него) конечно же есть проблемы, но это не одна из них. Это сообщение отредактировал(а) azesmcar - 20.5.2010, 12:05 |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Спасибо еще раз, за разъяснение, то есть я теперь уже так понимаю, что к изучению C++ нужно подходить примерно так, сначала изучать какие то фишки общие для всех компиляторов, а потом уже особенности тех компиляторов которые собираешься использовать (и стараться не ругаться в этот момент)
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |