Паскалевские строки в C/C++

Тема в разделе "LANGS.C", создана пользователем sivsoft, 23 янв 2012.

  1. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Доброго времени суток!
    Начал писать небольшую библиотеку по паскалевским строкам, без маляра Шлемиэля :).
    Есть несколько вопросов:
    1. Имеет ли это смысл - может есть уже хорошая отлаженная библиотека и я изобретаю очередной велосипед?
    2. memcpy - есть ли нормальный способ решения? Все которые видел копируют побайтово даже на асме. У себя написал так:
    Код (Text):
    1. inline void memcpy(void* dst, void* src, size_t len)
    2. {
    3.     __asm
    4.     {
    5.         mov esi, src
    6.         mov edi, dst
    7.         mov ecx, len
    8.         rep movsb
    9.     }
    10. }
    Но это все также побайтовое копирование. Помню на Z80 - старом проце, копирование одного блока памяти в другой выполнялось одной командой и занимало 4 такта. Здесь новейшие процы, а копирование побайтовое - может есть нормальное решение этого?
    3. strlen - настолько ли быстр? Есть ли смысл пытаться писать свое?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Угу, четыре такта. ) Откуда взял что побайтово, так уже давно никто не копирует, в том числе и библиотечные функции.
     
  3. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    ну может за 4 такта погорячился :) - давно это было - если не ошибаюсь LDIR команда, загружаем в регистры адреса, количество и LDIR выполняла ну ошибусь наверное по-моему около 20 тактов. Тем не менее - это достаточно быстро.

    Код (Text):
    1. rep movsb
    разве не побайтово?
    за решения типа
    Код (Text):
    1. while (count--) {
    2.         *(char *)dst = *(char *)src;
    3.         dst = (char *)dst - 1;
    4.         src = (char *)src - 1;
    вообще молчу...
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    sivsoft
    Фейспалм на фейспалме и фейспалмом погоняет. Скажи честно, у тебя ведь нет реальной задачи, в которой strlen оказался ботлнеком, тебе просто нечем заняться?
     
  5. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    _DEN_
    есть - но хочется решить такую задачу - а что не так?
    сейчас занимаюсь DBF форматом, например, и уже достали эти строки - начал поиски решения - так понятней?

    З.Ы. Если уж так интересно - задачи для свободного времени - на работе есть свои - 1С, Базы + С++...
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    Откуда ты взял этот код memcpy? Посмотри какой код генерит VS к примеру.

    Команда копирования памяти в speccy сама по себе занимает 20 или 30 тактов(точно тоже не помню), без учёта времени на работу с памятью.
    )

    З.Ы strlen кроме как побайтно не реализовать.
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    sivsoft
    Зачем?
     
  8. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    _DEN_
    это важно очень? если я делаю для какой-нить ТНК важную работу, то вы побежите сразу помогать, а если делаю для души то промолчите?

    З.Ы. чтобы удовлетворить ваш интерес - работа с DFB надобно для работы с 1С - некоторые операции делать напрямую заметно быстрее, но хочу (вот тут видите уже для души) сделать это на максимально-разумном низком уровне. На асме делать не буду по понятным причинам не буду, поэтому максимально низкий разумный уровень это C/C++ и WinAPI.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ден как всегда не в кассу, вопрос был как я понимаю про оптимальные алгоритмы.
     
  11. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    И что с того - вы в астрале? Не знали что DBF используется до сих пор начиная с той же 1С и заканчивая разными отчетами?
    В общем иди в школу - учитель уже ждет...

    Ни одного полезного комментария, сообщения только для троленья :dntknw:

    Для меня ваш диагноз тоже очевиден... тролло
     
  12. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    ну да :)
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster
    Ага, вообще это очень хорошо, что ТС завел эту тему. Ведь такие нетривиальные алгоритмы как вычисление длины строки и пересылка блока памяти до сих пор не доведены до ума и нуждаются в оптимизации.
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Я как раз писал что он не прав, но тем не менее практическую любую библиотечную функцию/алгоритм можно оптимизировать под конкретный случай. Ту же memcpy можно оптимизировать, к примеру под конкретный процессор.
     
  15. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Я просто задал вопрос и вместо того, чтобы разводить кучу бесполезных коментариев лучше бы ответили по существу - то есть: "я считаю так потому-то потому-то"
    Вместо этого вы даже ссылки не поленились поискать на разных "бакланов" и прочий интернет-сленг - это для вас видно очень важно, а по существу вопроса и по обсуждаемой теме ни одного ответа. Ведь это интереснее для вас, чем непосредственно программирование.

    З.Ы. Видно вы или еще в школе/институте учитесь или возраст зрелый но уровень до сих пор тот же школьный остался...
     
  16. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    А вообще вопросом номер один стоял - паскалевские строки в С/С++ если где нормально реализованы подскажите библиотеку или буду писать сам.
     
  17. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Посмотрел - смысл такой же. Правда куча еще дополнительных проверок, так что при прочих равных скорость у
    Код (Text):
    1. inline void memcpy(void* dst, void* src, size_t len)
    2. {
    3.     __asm
    4.     {
    5.         mov esi, src
    6.         mov edi, dst
    7.         mov ecx, len
    8.         rep movsd // на него меняем + предусмотреть надо для оставшегося байта и movsb на последок
    9.     }
    10. }
    будет примерно одинаковой. Если отвязываюсь от CRT (так как дизассемлил в итоге msvcr80d.dll) - код такой же останется?
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    sivsoft
    Ой, ну и что? Что, в 10-м классе человек не может хорошо разбираться в языке? Что вы чуть что сразу школой тыкаете?
     
  19. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    _DEN_
    Очевидно вас не в первый раз тыкают - потому как я вам об этом первый раз писал. Да человек может разбираться и в 5 классе в языке и быть хоть самым продвинутым гуру в нем, но поведение - а именно о нем я вам и говорил - может выдавать в нем школьника. На досуге посмотрите разницу между двумя очень похожими словами невежа и невежда.
    Это все не в обиду вам сказано, а с самыми лучшими чувствами.
     
  20. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    sivsoft
    Ну видите - вы цепляетесь просто к самому факту того, что я еще учуть в школе, а не к тому, что я вам говорю про ваши вопросы по программированию.