Capture e calcule o estouro durante a multiplicação de dois inteiros grandes

Eu estou procurando uma solução eficiente (opcionalmente padrão, elegante e fácil de implementar) para multiplicar números relativamente grandes e armazenar o resultado em um ou vários inteiros:

Vamos dizer que eu tenho dois inteiros de 64 bits declarados assim:

uint64_t a = xxx, b = yyy; 

Quando eu façoa * b, como posso detectar se a operação resulta em um estouro e, nesse caso, armazenar o carry em algum lugar?

Por favor note queEu não quero usar nenhuma biblioteca de números grandes desde que eu tenho restrições na maneira como eu armazeno os números.

questionAnswers(9)

yourAnswerToTheQuestion