![]() |
|
Модераторы: bsa |
![]()
|
|
| Lacoste1024 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 20.3.2011 Репутация: 1 Всего: 1 |
Здравствуйте! Я делаю исследовательскую работу по шифрованию. Сейчас я на этапе шифрования методом с ключом.
Код шифратора:
1. Можно ли как-нибудь оптимизировать код, чтобы программа работала быстрее? 2. В каком компиляторе (Borland C++, Visual C++, Dev-C++) этот код будет выполняться быстрее? 3. И ещё, если я несколько раз буду запускать программу, то с каждым последующим запуском время её работы сокращается. Объясните почему? Буду очень благодарен! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Lacoste1024
1. можно - читай файл полностью в буфер, а затем его обрабатывай, но может не хватить памяти. Как вариант, читай большими порциями в буфер. 2. разницу в скорости ты не заметишь, даже если она и будет. основной затык - множество вызовов функций fgetc/fputc. 3. не с каждым разом. При первом запуске исходный файл загружается ОС в кэш, поэтому при повторном запуске уже не читается с диска. |
|||
|
||||
| Lacoste1024 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 20.3.2011 Репутация: 1 Всего: 1 |
bsa,
Знаний для этого, боюсь, у меня мало. А если файл читать построчно, а не посимвольно (код в 1м посте), разница большая будет?
У меня есть специальная программа, которая измеряет время выполнения EXEшников до миллисекунд |
||||
|
|||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
про компилятор Dev-C++ никогда не слышал. просветишь ?
bsa имел в виду, что если ты будешь читать файл по одному символу, то в одном компиляторе это будет работать, допустим 30 сек, а в другом - 30,000001 сек. Если же будешь читать/писать весь файл (или достаточно большими блоками) то Visual C++ будет быстрее от 2-х до 10 раз в зависимости от задачи. Есть ещё компилятор от Intel. Раньше он "бил" студийный раза в 1,5...2, а на последней студии я разницы не заметил. Судя по списку компиляторов - у тебя windows, поэтому gcc советовать не буду -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
узкое место в программе - файловый ввод/вывод, скорость которого зависит в основном от параметров системы, в которой исполняется программа, так что разница в коде от разных компиляторов практически не скажется на результате. время исполнения может быть разным от запуска к запуску, на это влияет множество причин, связанных с состоянием системы: загрузка процессора, загрузка диска, состояние кэша памяти и дискового кэша. боюсь, погрешность исходных данных превысит точность Вашего инструмента. реальное ускорение процесса можно получить одновременным параллельным шифрованием нескольких участков файла. Добавлено через 5 минут и 9 секунд что касается буферизации, имхо удобно и практично использовать отображение файла в память (mmap в POSIX и CreateFileMapping в Windows). пусть ОС занимается буферизацией, это ее задача |
||||
|
|||||
| Lacoste1024 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 20.3.2011 Репутация: 1 Всего: 1 |
borisbn,
http://ru.wikipedia.org/wiki/Dev-C%2B%2 Написан на Delphi, но не пугайтесь. ОН довольно прост и это мне в нём нравится. А что насчёт строк скажете?
То есть брать строку из файла, перебирать каждый символ и кодировать его. Для варианта отображения файла в буфер у меня ещё знаний нету) Кстати я провёл тесты для исследовательской. Текстовый файл размером 89Мб. Кол-во символов - более 900 тысяч. На паскале шифратор полностью шифрует этот текст за 50 секунд. Delphi - 11с. Си - 25с. Дешифратор примерно за такое же время P.S. Delphi рулит P.S.S. На вопрос про строки ответьте пожалста) Это сообщение отредактировал(а) Lacoste1024 - 23.3.2011, 16:12 |
||||
|
|||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
1. Я знаю, что такое Dev-C++. Хотел, чтобы ты посмотрел. первый абзац этой статьи в вики
2. Ссылка не работает. Не хватает английской буквы B в конце Если с дельфи ещё понятно ( хотя тоже - какая версия ? ), то с Си... Какой компилятор ? Приведи свой код на Дельфи, работающий быстрее его аналога на MSVC 2008 (release) и я тебе обещаю плюс 1 в репутацию. Теперь насчёт строк. Я точно не скажу, но на 99% быстрее не будет, т.к. функция чтения строки работает примерно так: 1. прочитать 1 символ 2. если это не перевод строки goto 1 Быстрее всего будет мапирование файла в память, но если это сложно, то просто чтение не одного символа, а хотя бы 4096. кури fread Это сообщение отредактировал(а) borisbn - 23.3.2011, 16:35 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| Lacoste1024 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 20.3.2011 Репутация: 1 Всего: 1 |
borisbn,
Delphi - Borland Delphi 7; C++ - C++Builder 6 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
ессно. Builder - это отрыжка Delphi. К тому же ты наверняка не включал оптимизацию... ок. лови, допиливай
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
ну.... если уж быть точным, то
(из N1905=05-0165)
хотя, согласен, sizeof( *buf ) было бы правильнее. Чтобы можно было безболезненно менять тип этого buf а вот с заменой на 1 - не согласен. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
ну если быть точным, то size надо было установить в sizeof buf, а count в 1
или (хуже) size в 1 а count в bufSize но я не про это. а про то, что sizeof(char) == 1 по определению Добавлено @ 19:16 зачем менять его тип? Добавлено @ 19:22
Это сообщение отредактировал(а) baldina - 23.3.2011, 19:22 |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
в этом случае последний блок не вычитался бы ( при условии что размер файла не кратен 4096, ессно ) я ж дал определение из стандарта. там про размер char'а ничего не говорится. Вернее говорится, что
А вообще-то правильнее всего делать sizeof( *buf ). В этом случае ты спокойно можешь поменять тип buf в определении например на int
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| Lacoste1024 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 20.3.2011 Репутация: 1 Всего: 1 |
borisbn,
Как видно коды аналогичны. Delphi кодирует txt файл размером 89Мб за 11с. Программа созданная в MSVC 2010 за 24с |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |