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

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

  1. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    sivsoft
    На зилоге небыло команд переноса в памяти блоков. В последствии на камнях с расширениями(DB префикс вроде, их ввели 2 для расшаривания системы команд) были введены инструкции типо ldir.

    Не годится. Нужно определить выравнивание на 4 байта и использовать movsd.

    Сейчас производительность не определяется в тактах. Время исполнения инстуркций зависит от многих факторов, темболее если мультизадачная ось.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    Используйте std::string. Длину хранит, что ещё надо?
     
  3. sivsoft

    sivsoft New Member

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    Паскаль строка ещё больший отстой, ограничена 255 символами.
     
  5. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Booster
    вы не совсем правы.
    Паскалевские строки разные - теже строки в C++ Builder - 65536 обычные, а максимально - 4 294 967 295 символов - можно я не знаю - книги туда пачками пихать и при этом все летает.
    Идея паскалевских строк в том что размер строки ложится в первые 1,2,4 байта - в зависимости от максимальной размерности строк, а далее идут сами символы. В чем же профит? А в том что в C/C++ компилер не знает где заканчивается строка и для того, чтобы узнать длину строки, копировать строку, сложить строку да и вообще практически любые операции со строками - приходится проблегать ее всю до достижения символа 0. Что понятно замедляет работу значительно и в прогрессии. Когда одна, 10 строк - разницы особой не будет, нет она будет конечно, но незаметная, а когда 100-ни, 1000-чи, 1000000-ны строк - тогда уже тупит по страшному :)
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    sivsoft
    Да ладно, проблема надумана, даже мой учитель информатики об этом когда-то говорил. Могу завтра у него уточнить.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sivsoft
    Ну юзайте, BSTR строки тогда. Но как уже писал ранее, std::string тоже нормально.
     
  8. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    _DEN_
    ну чего - приведу известную статью Джоэла:
    http://russian.joelonsoftware.com/Articles/BacktoBasics.html
    заодно посмеетесь
     
  9. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    sivsoft
    http://youtu.be/RirqnBUQTEU
     
  10. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    sivsoft
    Я публично обосрал ASCIIZ-строки по тем же поводам лет на 7 раньше :)

    PS Ой, нет, не на семь. Примерно в то же время - статья старая.
     
  11. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    CyberManiac
    и чем вы пользуетесь по прошествии такого времени? нашли какое-нить решение?
    да старая - 2001 года по-моему - Шуми тогда в 4-ый раз чемпионом стал :)
     
  12. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    sivsoft
    Delphi, разумеется.

    Когда-то давно написал библиотечку на MASM, но она была очень ограниченная: создать строку из ASCIIZ-строки, сложить две строки и найти подстроку в строке. Правда для той задачи больше и не требовалось.
     
  13. sivsoft

    sivsoft New Member

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

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    CyberManiac
    а вот я хочу С/С++, но не Билдер, Билдером я пользуюсь для быстрого написания прог. Кстати многие .Нетовцы удивятся, но пишется быстрее чем в ЦКрестах
     
  15. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    strlen как раз можно и двордами (и даже по 16 байт на SSE2). А вот memcpy и strcat оперируют двумя указателями, из которых один или оба в общем случае могут быть невыравненными, поэтому приходится их анализировать и выбирать оптимальный\подходящий вариант копирования, и соотв-но для сравнительно коротких строк вся эта предв.и пост-обработка может сожрать весь выигрыш - соотв-но дело не только в кол-ве обрабатываемых строк, но и в их средней длине
     
  16. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    мне кажется это самое важное
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    leo
    Выход за пределы как ловить будете, эксепшонами чтоль? )
     
  18. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Booster
    дык считаешь сколько можно "двордами" а конец побайтово. Если строка длиннее сколькито ( опытом надо устанавливать ) байт, будет эффективно.

    Хотя я говорил про копирование, а не про strlen
     
  19. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    spa
    Какой конец, длина неизвестна(strlen).
     
  20. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Booster
    я уже исправил, невнимательно посмотрел, а так присоединяюсь к вопросу, что делать если выйдем за границу.