![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
берем какую-нибудь тривиальную программу
компилируем (msvc2008), получаем .exe размером 36Кб, размер секции кода 0x6200 а все потому что используется немалого размера mainCRTStartup, а данные CRT хранятся в TLS изза чего при вызове rand() используется уйма апи доступа к TLS и сохранения LastErr, а так же немало связанных с ними проверок что с этим можно сделать? Это сообщение отредактировал(а) GoldFinch - 13.4.2009, 15:32 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
учитывая размер сектора любой файловой системы - не забивать себе голову глупостями
ради исключительно академического интереса - отключить CRT и юзать исключительно ОС API и асм |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
J0ker, размер сектора почти любой файловой системы - 512 байт, размер страницы памяти - 4Кб
я хочу юзать стандартные библиотеки, но при этом чтобы небыло лишнего кода "юзать исключительно ОС API и асм" - это совет не для раздела С++ |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
начиная с vs2005 - ничего, а в старых версиях студии, можно использовать signle threaded rtl но смысла я не вижу, в более менее сложном приложении лучше использовать multithreaded версию rtl |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
пардон
имелось ввиду конечно кластер |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Lazin, например есть задача заполнить большой массив случайными значениями, смоделировать случайный процесс, вобщем надо много раз вызвать функцию rand()
в делфи функция random выполняется за десяток инструкций процессора (могло бы быть и меньше)
а в С++ трасса rand() состоит из 80 инструкций, причем весьма не быстрых:
|
||||
|
|||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
GoldFinch,
случайные числа вообще тема сложная здесь наряду со скоростью надо рассматривать распределение и "случайность" |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
J0ker, ты читал о чем я пишу? алгоритм формирования случайного числа и в С++ и в паскале и наверное во многих других ЯП один и тот же: randseed=randseed*a+b
но в С++ в функции rand() много лишнего кода никак не связанного с генерацией случайного числа |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
GoldFinch, вроде ж уже выяснили - многопоточный рантайм, проблемы синхронизации (чтобы в двух потоках не было одинаковой последовательности твоих чисел).
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
это как это будут одинаковые последоватльности в двух потоках если числа случайные берутся из одного ГПСЧ? вот как раз когда у каждого потока свой ГПСЧ, то и могут возникнуть одинаковые последовательности |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
GoldFinch, я подозреваю (не вчитывался в код) что в VC rand реализован per-thread - в дельфи во-первых соершенно не thread-safe, а во-вторых с т.з. секьюрити не per-thread rand - это явный косяк
|
|||
|
||||
| Cтpaнник |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 12.10.2008 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Да можешь уже и не подозревать, - так и есть, в VC++ rand() действительно per-thread. По крайней мере, в VC++ 2005 я этим вопросом интересовался.
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
GoldFinch, дык в чем вопрос то? утебя есть ответ, что тебя еще интересует? Не нравятся студийные накладки - не используй ее. Благо есть бесплатные аналоги.
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Я не совсем понимаю в чем вопрос?
CRT непотокобезопасная библиотека, она использует глобальные переменные итд...чтобы решить эту проблему ее загружают в TLS (Thread Local Storage). Если вопрос то вот ответ либо используй Single Thread, либо забудь об этом. Добавлено через 1 минуту и 11 секунд опередили Это сообщение отредактировал(а) azesmcar - 13.4.2009, 20:56 |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
GoldFinch,
что с этим можно сделать? писать всё на ассемблере, как настоящий джедай, а не чайник какойта, а с++ - фтопку. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
лишние проверки STL отключаются дефайном "#define _SECURE_SCL 0"
может в CRT тоже есть чтото подобное? или может гдето есть оптимизированная версия CRT? |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
GoldFinch, ты джедай или где? теж сказали - на ассемблере
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
GoldFinch
Не видел отдельного CRT. А если попробовать GCC? |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
azesmcar, нехочу gcc, в msvc слишком много вкусных вещей которых нет в gcc
одно наличие __asm чего стоит |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
GoldFinch
не понял?? кто сказал что в GCC нет ассемблерных вставок? http://www.ibiblio.org/gferg/ldp/GCC-Inlin...mbly-HOWTO.html Практически все что есть в Визуал студии заменяется аналогами в GCC. Надо только поискать. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
azesmcar, я не сказал что их нет, я говорю что синтаксис асм вставок в msvc удобнее чем в gcc
может все что есть в Визуал студии и заменяется аналогами в GCC, но не факт что эта замена так же хороша как и оригинал |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
а это кто говорил?
спорный вопрос что считать оригиналом и что лучше. С тем же успехом скажу - не факт что микрософтовские функции лучше POSIX. Это сообщение отредактировал(а) azesmcar - 14.4.2009, 09:52 |
||||
|
|||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
...............
Это сообщение отредактировал(а) J0ker - 14.4.2009, 16:33 |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
586, этот код не работает, какой смысл постить неработающий код?
|
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Кажись это для шестерки. Добавлено через 1 минуту и 46 секунд Минимизация размера программ Добавлено через 3 минуты и 3 секунды WCRT_1.12.zip |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
586, в msvc2008 валится после ntdll.RtlDecodePointer, видимо потому что не был выполнен EncodePointer
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
у меня работает. MSVC 2008 Professional. только при сборке Release предупреждает: warning LNK4229: invalid directive '/opt:nowin98' encountered; ignored размер debug версии exe-шника: 20480 байт размер release: 3584 байт |
|||
|
||||
| 586 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
У тебя Debug-версия? Это нужно делать в Release-версии. Что отображено в окне Call Stack? Debug->Windows->Call Stack. Эта информация может прояснить ситуацию.
/opt:nowin98 - устаревшая опция. В 2005 студии (и старше) эта опция вшита в линкер по умолчанию. |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
zim22, у тебя CRT в dll, естественно все работает
586, компилю релиз со статическим CRT, дебажу олькой, где и как валится прога я уже писал, прога выполняет DecodePointer и call eax, указатель битый, прога прыгает вникуда и валится |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
586, и как использование длл с CRT помогает решить сабжевую проблему?
(длл с CRT сама по себе - зло, с ней программы даже не компе с msvc не работают о_О) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |