Soru oldukça basit. 32bit sistemlerdeHer iki 32bit ve 64 bit sistemlerde imzasız uzun süre 32 bit sistemlerde std :: size_t 4 bayt 8 bayttır?
: 64bit sistemlerde
std::cout << sizeof(unsigned int); //4
std::cout << sizeof(unsigned long long); //8
std::cout << sizeof(std::size_t); //4
:
std::cout << sizeof(unsigned int); //4
std::cout << sizeof(unsigned long long); //8
std::cout << sizeof(std::size_t); //8
Sadece MSVC sahiptir uygulanmasını kontrol ve şuna benzer: Peki neden
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef unsigned int size_t;
#endif
Hem 32bit hem de 64bit sy üzerinde std::size_t
unsigned long long
(std::uintmax_t
) yapmayın açıkça desteklediklerinde kaynaklanıyor? Yoksa yanlış mıyım?
size_t, olası en büyük nesnenin boyutunu tutacak kadar büyük olan en verimli türde olmalıdır. 32 bit sistemde, bu 32 bit işaretsiz bir tamsayıdır. 64 bit, 32 bit sistemde daha az verimlidir. (X86-64'te bile 64 bit, 32-bit'ten daha az verimli bir miktardır, ancak 32-bit, maksimum boyuttaki nesnelerin boyutu için yeterince büyük değildir). 32 bit modda, 64 bit işlemcide bile, 64 bit işaretsiz 32 bitten çok daha az verimlidir. – JSF