Страница: 1 | 2 |
Вопрос: Файлы
Добавлено: 04.11.06 11:59
Автор вопроса: VβÐUηìt | Web-сайт:
Ответы
Всего ответов: 29
Номер ответа: 16
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #16
Добавлено: 06.11.06 08:58
А Binarry считывать запись с каким номером?
Номер ответа: 17
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #17
Добавлено: 06.11.06 09:34
Если можно хранить только символы и никаких других (типа байт 0, 1 и т.д.), тогда придётся перегонять каждый байт в символ (типа 000, 001, или в 16ричную систему, тогда понабится 2 символа для хранения числа 256). Если же можно, то всё очень просто делается
В файле можно держать хоть всю бадягу ASCII. Другое дело, как ее туда засунуть?
Номер ответа: 18
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #18
Добавлено: 06.11.06 09:35
Совсем не требуется, чтобы там можно было что-то разобрать. Главное - чтобы программа смогла выцепить от туда текст и картинку.
Номер ответа: 19
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #19
Добавлено: 06.11.06 14:50
Не, если будешь юзать апи вместо встроенных функций и разворачивать циклы всё будет по скорости сносно. Эксперементировать над
Номер ответа: 20
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #20
Добавлено: 06.11.06 15:16
1. В каких рамках сносно? Скажем для 640х480?
2. Ra$cal, чем тебе не нравится идея с бинарой?
Номер ответа: 21
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #21
Добавлено: 06.11.06 16:15
мда... помойму ситуация тут пропавшая, тебе что в лоб что полбу )
2 Rascal безполезно, ему или готовое, или флудить можно до ээээ объемов
Номер ответа: 22
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #22
Добавлено: 06.11.06 16:25
1) Очень много условий. Первое, какого формата картинка. Вообще, ты же работать будешь с картинкой как с одним участком памяти, не вдаваясь в детали формата. Отсюда вывод - главное размер картинки. Теперь, пусть картинка 100 килобайт. Это 102400 байт. Раз ты говоришь, что все символы прокатят, то переводить в другой вид байты не надо. Ты знаешь размер картинки. Знаешь размер текста. Составляешь структуру файла [1байт тип - текст или картинка][4 байта размер данных][сами данные]. Соотв создаёшь массив нужного размера и заполняешь поля. У тебя получается цельный кусок данных. Запись текста и картинки вообще желательно делать через memcpy (это в С++, оптимизированная функция).
Провёл эксперимент. Написал прогу на с++. Вот код
BYTE* file = (BYTE*)OpenFile ("test.bin"
if (file == 0)
system("pause"
BYTE* temp;
temp = (BYTE*)VirtualAlloc(0, Size, MEM_COMMIT, PAGE_READWRITE);
if (temp == 0)
system("pause"
unsigned long CounterBefore, CounterAfter;
CounterBefore = GetTickCount();
memcpy (temp, file, Size);
CounterAfter = GetTickCount();
std::cout << CounterAfter-CounterBefore << std::endl;
CounterBefore = GetTickCount();
memcpy (temp, file, Size);
CounterAfter = GetTickCount();
std::cout << CounterAfter-CounterBefore << std::endl;
CounterBefore = GetTickCount();
memcpy (temp, file, Size);
CounterAfter = GetTickCount();
std::cout << CounterAfter-CounterBefore << std::endl;
CloseFile(file);
system("pause"
Просто октрывает файл, выделяет память размером с файл, и копирует туда файл. 3 раза копирую на всякий пожарный из-за особенностей работы с диском (кэшируется всё не сразу). Так вот. Файл размером 74 кило скопирован за 0 миллисекунд. Файл размером 5 мегабайт скопирован за 16 миллисекунд. Думаю понятно на счёт скорости
2) Фиг знает что за бинара, есть подозрение это ты про открытие файла средствами васика. Пойми, из-за упрощений работы делается лишняя работа. Когда ты вызываешь апи, ты чётко знаешь какой объём работы выполняется (минимальный. правда это относительно. сами апи много чего делают, но это минимум. ибо по другому никак. а васик мало того что апи вызывает, он ещё сам колдует много). Вот отсюда могут быть потери. Делай через маппинг работу с файлом, который надо только читать и менять в нём чт-нибудь (дополнение через маппинги немного неудобны)
Номер ответа: 23
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #23
Добавлено: 06.11.06 16:43
{
for (int i = 0; i < size; i++){
dest[i] = src[i];
}
}
давно хотел проверить скорость такой функции и мемспу Так вот. Компилил с опитимизацией скорости и под pentium4. Файл размером 66.6 мегабайта (какое число циклом перекидывается за
250
156
266
memcpy же это делает за
93
110
109
Хвала memcpy. Как видим в 2 раза быстрее
2Hacker
да мне просто самому любопытно было. Я давно уже подумывал проверить эту фигню
Номер ответа: 24
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #24
Добавлено: 06.11.06 17:02
Помню наш сишник, препод в универе пливался на меня, когда мы структуры проходили... Я различные манипуляции с ними через memcpy делал, а он мне говорил что мол самому написать быстрее будет по скорости работы... т.к. апи много чего проверяет, итп...
А с твоего теста видно что препод был неправ. Я это собственно знал с самого начала, просто жаль что небыло человека вовремя который бы это подтвердил. Так что спасибо
Чтобы было ещё быстрее
.asm
...
Но это тема моего второго курса, аССЯмблер
Номер ответа: 25
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #25
Добавлено: 06.11.06 17:17
это не апи. это CRT функция. Ну а быстрее ты на асме не напишешь. У асма компилятор не потимизирующий. Ты сам будешь вынужден вспоминать, при каких последовательностях команд процессор работает быстрее. Сколько тактов отводится при определённых наборах. Про штрафы, про неправильно предсказанные переходы. про простой конвеера. А ты прочитай статью Криса Касперски про профайлинг и оптимизацию программы с помощью VTune. Ты НИКОГДА не оптимизнёшь лучше, чем компиль толковый. Максимум что у тебя получится, это немного доделать результат работы компилятора(есено юзая профайлер, просто в уме уже мало толку оптимайзить). Заодно посмотри на дизасм memcpy. Она просто за проход 4 байта копирует. Кста ощутил всю силу оптимизатора в 2005 студии. Написал хук библиотеку, отоаживать студия её не может. Отлаживал в Olly. Он хоть и пишет, что за строка кода на С++ соответствует строке кода дизасма, но там было нечто. Строки перепутаны. То есть ща вроде должна быть первая строка сорца, а по регистрам видно, что нифига, это четвёртая. Потом вторая, потом первая, кароч полное мясо. Вот это было оптимизация для конвеера команд процессора. Пришлось отрубить нах, ибо мосх сломался уже ччерез пол часа. И ЭТО ОТЛАЖИВАЯ СВОЙ КОД
Номер ответа: 26
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #26
Добавлено: 06.11.06 17:49
А strcpy-то какой красивый в CRT...
while(*dest++ = *src++);
Номер ответа: 27
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #27
Добавлено: 06.11.06 18:04
Мне больше всего нравится strlen (хотя не уверен, мож другая функция). Там по четыре символа (их значения сразу в регистр). Потом AND eax, 8f8f8f8f вроде (но суть в AND ЧИСЛО). Потом решает ниже, есть ноль или нет. Вроде strlen... А может strcmp
Номер ответа: 28
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #28
Добавлено: 09.11.06 11:18
По сабжу:
1. RTB & RTF
2. File header & MIME.
Номер ответа: 29
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #29
Добавлено: 09.11.06 14:43
Ну чего ж, сложность инструкции можно и в уме оценить, приблезительно ессно... можно вместо функций макросы подставлять, можно оптимизировать переменные до разумной длинны, ну много чего ещё в уме оптимизировать можно Всем этим в большей или меньшей степени и сам компилятор знимается, но я думаю лучше и самому, и + потом ещё компилятор