Do wielkości i ilości najlepiej używać size_t, bo to gwarantuje na każdej architekturze, że da się w to włożyć maksymalną wielkość obiektu, lub maksymalną liczbę unikatowych obiektów (tudzież indeks obiektu w takim zbiorze). W praktyce na "normalnych współczesnych komputerach" size_t jest 64-bitowym unsigned integerem.
Natomiast unsigned int jest, na "normalnych współczesnych komputerach" 32-bitową zmienną, więc ma ograniczenie do 4 miliardów "czegoś" lub obiektów o wielkość 4GB (minus 1 bajt). Nie ma generalnie powodu, żeby tego używać do liczby / indeksu obiektów, czy wielkości obiektów – wprowadza się wtedy sztuczne ograniczenia.
Co za tym idzie, dobrą praktyką jest używanie size_t do wielkości/indeksów/liczby obiektów, chyba, że jest jakiś bardzo bardzo dobry powód, żeby tego nie robić.