| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблемы компилятора Microsoft |
| Автор: ecspertiza 19.5.2010, 20:44 | ||
| Гуру программеры, объясните мне пожалуйста мне кажется или Microsoft плевала на стандарты? Есть два компилятора MinGW на базе gcc 4.4.1 и Visual Studio 2008 есть структура данных (это к примеру)
если компилить под MinGW то ф-ция sizeof(s) вернет 16 ,а если скомпилить под студией то почему то 56, это с чего так вдруг? |
| Автор: GoldFinch 19.5.2010, 20:57 |
| ecspertiza, я тоже хотел бы знать где вы там взяли 56 алсо о каких стандартах речь? в стандарте языка не определено выравнивание |
| Автор: ecspertiza 19.5.2010, 21:15 | ||
| Я структуру привел просто для примера, холивар тоже разводить не хочу, просто интересно с какой стати? вот точный код который выводит так инфу
получается что C++ от мелкомягких отличается от общечеловеческого? |
| Автор: djamshud 19.5.2010, 21:21 |
| ecspertiza, получается, что в гцц и мсцпп стлевская строка по-разному реализована. Добавлено через 1 минуту и 8 секунд >получается что C++ от мелкомягких отличается от общечеловеческого? Общечеловеческий - это который аж на одном проценте десктопов? :) |
| Автор: ecspertiza 19.5.2010, 21:38 |
Просто порой возникает ощущение что C++ и Visual С++ это вообще два разных языка программирования, общечеловеческий это тот на котором можно написать софтину и без болезненно перенести на другую платформу. |
| Автор: djamshud 19.5.2010, 21:40 |
| ecspertiza, это ну никак не про гцц. А вот интеловский компилятор стандартам следует весьма строго. |
| Автор: GoldFinch 19.5.2010, 21:43 |
| ecspertiza, видимо у вас настроки "Debug". в этом случае в string включаются дополнительные отладочные члены. возможно msvc также выделяет место для коротких строк (не уверен) Добавлено через 1 минуту и 3 секунды в любом случае, стандарт ничего не говорит про размер string |
| Автор: djamshud 19.5.2010, 22:02 |
| Когда пишешь на одном компиляторе, никогда проблем не возникает. Я свой софт под вендой тоже гцц собираю, потому что вижуал студия его не переварит. И не потому, что она плохая, а потому что, что она, что гцц имеют собственное представление о с++, кроме того екстеншены опять же. http://software.intel.com/en-us/intel-compilers/ |
| Автор: ecspertiza 19.5.2010, 22:16 |
| Жаль что на переносимость расчитывать не приходится, в любом случае спасибо за разъяснение. |
| Автор: GoldFinch 19.5.2010, 22:24 |
| используя intel compiler, надо учитывать что он генерит плохой код для AMD |
| Автор: djamshud 19.5.2010, 22:32 |
| GoldFinch, ага. Я его привел в качестве примера очень педантичного компилятора. Еще он очень медленный, и как показали недавние исследования у gcc выигрывал немного только в паре тестов, в остальном - примерно на равных. |
| Автор: boostcoder 19.5.2010, 22:49 |
| вставлю своих пять копеек: sizeof(std::string) никак не обязан быть как-то стандартным значением. а вообще, применять sizeof() можно не ко всем типам...далеко не ко всем. |
| Автор: djamshud 19.5.2010, 22:51 |
| boostcoder, можно пример типа, к которму низя применить sizeof? |
| Автор: GoldFinch 19.5.2010, 22:53 | ||
djamshud,
|
| Автор: djamshud 19.5.2010, 22:59 |
| GoldFinch, *p в данном случае не тип, и понятно, что компилятор даст размер типа А. |
| Автор: SVN74 19.5.2010, 23:02 |
| в Turbo C++ тоже 56 байт... сам std::string = 40 байт |
| Автор: boostcoder 19.5.2010, 23:04 |
не нужно придираться к словам. в строчке выше, описанной, что я имел ввиду. |
| Автор: djamshud 19.5.2010, 23:07 |
| boostcoder, на практике такие строчки пишут только идиоты. Добавлено @ 23:11 >а вообще, применять sizeof() можно не ко всем типам...далеко не ко всем. То есть, если в вас вселился кэп, и вы хотели сказать "sizeof можно применять далеко не ко всякой неведомой ...", то да. Я же честно интересовался, к какому типу низя ее применить. |
| Автор: boostcoder 19.5.2010, 23:37 | ||
вы хам. |
| Автор: GoldFinch 20.5.2010, 00:01 | ||
| djamshud, sizeof применяется не толко к типам, но и к выражениям. но чтобы вас успокоить, я напишу
|
| Автор: djamshud 20.5.2010, 00:21 |
| GoldFinch, меня не надо успокаивать, я расслаблен и не напряжен. И я знаю, к чему применяется sizeof. Но он дает результат о размере типа, а не о размере объекта, потому что обрабатывается на момент компиляции, а typeof(*p)==A. Впрочем ты это и так прекрасно понимаешь, не вижу смысла толочь воду в ступе. И если же кто-то таким образом сообразил получить информацию о размере объекта в рантайме, он клинический идиот. |
| Автор: Earnest 20.5.2010, 07:46 |
| Г-да программеры, сбавьте тон, пока не началось... Эк на вас в ночи накатило Все хорошо, sizeof нормальный оператор, применяйте на здоровье. Даже если глупость какую напишите, никто особо не пострадает. |
| Автор: GoldFinch 20.5.2010, 09:27 | ||||
а все потому, что
|
| Автор: ecspertiza 20.5.2010, 10:28 |
| Нужно закрывать тему, а то еще подеретесь |
| Автор: djamshud 20.5.2010, 11:27 |
| GoldFinch, ты тролль. И мне плевать на твою аллергию. Еще раз >применять sizeof() можно не ко всем типам...далеко не ко всем. никак не связано с истинной мыслью автора про неведомую ... . Развели блин демагогию. |
| Автор: xvr 20.5.2010, 11:55 | ||
Какое отношение имеет применимость sizeof от чего бы то не было к теме топика (напоминаю - 'Проблемы компилятора Microsoft')?
|
| Автор: azesmcar 20.5.2010, 12:03 |
| ecspertiza Один и тот же C++ код не должен работать одинаково на разных платформах и компиляторах, для этого в стандарте есть оговорка - implementation defined, т.е. зависит от реализации, размер int -а зависит от реализации, если нужно именно 32-х битное число то можно использовать скажем boost::int32_t, либо определять свой тип. Также со всем остальным, писать переносимый код не так-то просто. У компилятора микрософт (и не только у него) конечно же есть проблемы, но это не одна из них. |
| Автор: ecspertiza 20.5.2010, 12:53 |
| Спасибо еще раз, за разъяснение, то есть я теперь уже так понимаю, что к изучению C++ нужно подходить примерно так, сначала изучать какие то фишки общие для всех компиляторов, а потом уже особенности тех компиляторов которые собираешься использовать (и стараться не ругаться в этот момент) |