int_least64_t vs int_fast64_t vs int64_t

Estou tentando portar meu código para 64 bits.

Descobri que o C ++ fornece tipos inteiros de 64 bits, mas ainda estou confuso sobre iss

Primeiro, eu encontrei quatro diferentes 64 bitsints:

int_least64_t
int_fast64_t
int64_t
intmax_t

e suas contrapartes não assinadas. Testei-os usandosizeof() e têm 8 bytes e 64 bit

Qual é a diferença entre eles? Qual é o significado doleast efast types? A respeitointmax_t?