Вопрос вот какой.
Имея дело с ANSI C, строки предтавляются в виде массива, завершающегося \0.
И такой вариант представления строк есть не самый быстрый для обработки.
Как вариант - Паскалевские строки, где первый байт - это длина строки.
Есть ли в языке Си возможность работать с такими строками?
Я так полагаю, это может быть реализовано библиотеками?
Или же это можно реализовать самому?
Паскалевские строки в Си (ANSI C)
Модератор: Модераторы разделов
-
oav
- Бывший модератор
- Сообщения: 296
Re: Паскалевские строки в Си
Да. Обсолютно все можно реализовать самому на С. Аналог паскалевских строк в Win32 API - BSTR
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Паскалевские строки в Си
Встроенной, в простом C - нет.
-
Nab
- Сообщения: 257
Re: Паскалевские строки в Си
Они нынче также представляются и в Делфи, чтобы использовать старый формат строк нужно указывать тип ShortString.Victor Gr. писал(а): ↑10.03.2006 13:46Вопрос вот какой.
Имея дело с ANSI C, строки предтавляются в виде массива, завершающегося \0.
Victor Gr. писал(а): ↑10.03.2006 13:46И такой вариант представления строк есть не самый быстрый для обработки.
Разницы в обработке нет абсолютно.... все зависит от подхода, я у себя в реализации парсера XML когдато отказался от встроенных функций и писал свои которые мне дали восьмикраный выиграш в скорости, но возможно были не так переносимы как стандартные...
Victor Gr. писал(а): ↑10.03.2006 13:46Как вариант - Паскалевские строки, где первый байт - это длина строки.
А Вас не смущает ограничение строки в 255 символов именно из за того что один байт....
Victor Gr. писал(а): ↑10.03.2006 13:46Есть ли в языке Си возможность работать с такими строками?
Я так полагаю, это может быть реализовано библиотеками?
Или же это можно реализовать самому?
Реализация будут немного кривовата
потому как паскаль работает с ними нативно, динамически распределяя память, и к сожалению той же красоты реализации будет тяжело добиться
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Паскалевские строки в Си
И кстати, откуда сведения, что "паскалевская" реализация быстрее? Потому как я часто слышу и тако, и обратное мнение.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Victor Gr.
- Сообщения: 98
Re: Паскалевские строки в Си
По здравому смыслу даже.
Что нужно сделать, чтобы склеить две строки ASCIZ и паскалевская?..
А Вас не смущает ограничение строки в 255 символов именно из за того что один байт....
Ну можно ведь и два и три байта выделить на длину строки
Оверхед в 3 байта - это допустимо, если скорость обработки увеличивается! )
-
Nab
- Сообщения: 257
Re: Паскалевские строки в Си
Victor Gr. писал(а): ↑10.03.2006 19:27
По здравому смыслу даже.
Что нужно сделать, чтобы склеить две строки ASCIZ и паскалевская?..
Абсолютно одно и тоже ...
Как раз по здравому смыслу быстрее в сроках с нулем...
потому как getmem и copymem из двух буферов ясно и понятно, а паскаль неизвестно что там колбасит и как расставляет строки, если вы сложите две строки объявленные как string[15] и заполненные больше чем на половину..., и потом попробуйте сложить две строки с количеством символов в сумме больше чем 255....
Хотя я подозреваю паскаль делает тоже самое только внутри себя
Victor Gr. писал(а): ↑10.03.2006 19:27А Вас не смущает ограничение строки в 255 символов именно из за того что один байт....
Ну можно ведь и два и три байта выделить на длину строки
Оверхед в 3 байта - это допустимо, если скорость обработки увеличивается! )
Да выделяйте сколько угодно, но это не будут уже паскалевские строки в том виде как вы привыкли...
кстати паскаль для String и AnsiString выделяет первые четыре байта (целое), а возвращает указатель на строку+4, и оканчивает их 0....
поверьте так удобней и быстрее
для t.t просто паскалевскаие строки красивей и начинающему програмисту кажется что d+f будет работать быстрее чем MyStrAdd(d,f)
-
Victor Gr.
- Сообщения: 98
Re: Паскалевские строки в Си
Вот тут хорошо аргументировано.
http://russian.joelonsoftware.com/Articles/BacktoBasics.html
У Криса Касперского много по теме в его книге "Техника оптимизации программ: эффективное использованое памяти".
http://russian.joelonsoftware.com/Articles/BacktoBasics.html
У Криса Касперского много по теме в его книге "Техника оптимизации программ: эффективное использованое памяти".
-
Nab
- Сообщения: 257
Re: Паскалевские строки в Си
Я видимо плохо объяснил свою мысь...
Вы бы посмотрели в исходниках VCL как там реализованы строки... кроме хранения в первых 4 байтах размера строки, они ничем не отличаются, то есть являются абсолютной копией строк с zero на конце... Другое дело что работа с этими типами данных реализована красиво в паскале, но есть и свои минусы... эти первые четыре байта зачастую мешают при работе, копировании и т.д.
Размер можно хранить также и в C только реализовать это настолько прозрачно как в Паскале не получится
А складывание строк операция везде одинаковая все зависит от накладных расходов..
Программы или используют больше памяти и быстрее едут, или лопатят все медленно но занимают мало места.. Это в принципе основа оптимизации по скорости или размеру...
Вот у програмиста и есть главная задача, добиться компроммиса, между двумя этими задачами...
А не как нынче, посмотришь на этих монстров и сразу в DOS хочется
Вы бы посмотрели в исходниках VCL как там реализованы строки... кроме хранения в первых 4 байтах размера строки, они ничем не отличаются, то есть являются абсолютной копией строк с zero на конце... Другое дело что работа с этими типами данных реализована красиво в паскале, но есть и свои минусы... эти первые четыре байта зачастую мешают при работе, копировании и т.д.
Размер можно хранить также и в C только реализовать это настолько прозрачно как в Паскале не получится
А складывание строк операция везде одинаковая все зависит от накладных расходов..
Программы или используют больше памяти и быстрее едут, или лопатят все медленно но занимают мало места.. Это в принципе основа оптимизации по скорости или размеру...
Вот у програмиста и есть главная задача, добиться компроммиса, между двумя этими задачами...
А не как нынче, посмотришь на этих монстров и сразу в DOS хочется
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Паскалевские строки в Си
Обратный пример: выделение подстроки ;-)(Victor Gr. @ Mar 10 2006, в 19:27) писал(а):По здравому смыслу даже.
Что нужно сделать, чтобы склеить две строки ASCIZ и паскалевская?..
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж