?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Flag Next Entry
(no subject)
nyaload
_winnie
Простой перестановкой строк удалось уменьшить asm-код в полтора раза.


    void put(char in_char)
    {
        assert(!is_closed());
        if (m_top == m_buf_size)
            flush();
        m_buf[m_top++] = in_char;
        m_is_char <<= 1;
    }

    void put(char in_char)
    {
        assert(!is_closed());
        m_is_char <<= 1;
        m_buf[m_top++] = in_char;
        if (m_top == m_buf_size)
            flush();
    }
Winnie C++ Colorizer




Вот так вот.
Произошло это потому, что flush "портил" m_top, и компилятор заново его грузил, а так же почему-то делал бесcмысленные push/pop.

Ускорил библиотеку на 5-10%, в зависимости от format string.
Но компилятор всё равно отказывается инлайнить этот метод.
Думаю, что бы еще сделать, что бы еще упростить этот кусок кода.

Можно попробовать отказаться от всеядности, которая позволяет писать и char, и wchar_t, но это повлечёт изменения в куче мест.