Может ли быть переполнение в анонимном объекте (выражении)? С++

Вопрос: как выделяется память под анонимные объекты и выражения?

Подробнее: Сделал алгоритм Эль-Гамаля в режиме цифровой подписи. Все работает шикарно, но если числа больше ~3000, то начинается непредсказуемое поведение. Поскольку алгоритм верный, то грешу на данный участок кода:

unsigned mymath::powmod(unsigned base, unsigned exp, unsigned modulo)
{
    unsigned res = 1;

    while (exp != 0)
    {
        if ((exp & 1) != 0)
        {
            res = (1ll * res * base) % modulo; // 9 строка
        }   

        base = (1ll * base * base) % modulo; // 12 строка
        exp >>= 1;
    }

    return res;
}

Скорее всего в этом коде при использовании больших чисел возникает переполнение. Вопрос: где и почему? Сами аргументы изначально имеют значение около 3000, что в пределах unsigned int, значит переполнение внутри кода. Однако внутри кода я после всех действий вычисляю остаток по модулю, что дает нам довольно скромные числа в районе тех же 3000.

Соответственно: Как выделяется память под анонимные объекты и выражения? Может ли быть внутри них переполнение?


Ответы (0 шт):