2014-09-24 3 views
4

У меня возникли вопросы при изучении исходных кодов KVM-QEMU.Назначение оператора и проверка переполнения

ram_size = sz; 
if (ram_size != sz) { 
    fprintf(stderr, "qemu: ram size too large\n"); 
    exit(1); 
} 

SZ является uint64_t и ram_size является ram_addr_t, который также определен как uint64_t.

Каковы следующие коды, используемые для (проверка целочисленного переполнения)? Как это работает?

Спасибо.

ответ

3

Если присмотреться к определению ram_addr_t, вы увидите что-то вроде:

/* address in the RAM (different from a physical address) */ 
#if defined(CONFIG_XEN_BACKEND) 
typedef uint64_t ram_addr_t; 
# define RAM_ADDR_MAX UINT64_MAX 
# define RAM_ADDR_FMT "%" PRIx64 
#else 
typedef uintptr_t ram_addr_t; 
# define RAM_ADDR_MAX UINTPTR_MAX 
# define RAM_ADDR_FMT "%" PRIxPTR 
#endif 

Обратите внимание, что это также может быть uintptr_t, который не может быть типа 64-битным. В этом случае возникла бы проблема с этим назначением, если sz были больше UINTPTR_MAX.

+0

О, я вижу. Спасибо за ваши комментарии. – lmingcsce

Смежные вопросы