17

Что представляет из себя тип size_t, похожий на тип int? И для чего его используют?

perfect
  • 10,021

2 Answers2

13

Открываем cplusplus.com - size_t и читаем

size_t Unsigned integral type

беззнаковое целое. То есть, это не int, он знаковый.

Alias of one of the fundamental unsigned integer types.

Псевдоним для одного из фундаментальных без знаковых типов. (то есть, скорее всего 4 или 8 байтового).

It is a type able to represent the size of any object in bytes: size_t is the type returned by the sizeof operator and is widely used in the standard library to represent sizes and counts.

Предназначен для отображения размера любого объекта в байтах: это возвращает size_of и много функций стандартной библиотеки - всякие length и count.

KoVadim
  • 112,121
  • 6
  • 94
  • 160
  • Спасибо, все понятно. – perfect Jan 01 '15 at 11:20
  • 5
    Если коротко, то целое без знака 32 бит на 32-разрядных и 64 бит на 64-разрядных CPU (размер size_t должен совпадать с размером указателя для данной платформы). – avp Jan 01 '15 at 21:24
  • @avp, Почему размер указателя должен совпадать с размером size_t? – wololo Oct 20 '17 at 21:49
  • Потому что указатель должен быть в состоянии адресовать любой байт в памяти, а size_t хранить размер любого (в т.ч. занимающего всю память) объекта. – avp Oct 20 '17 at 22:24
  • @avp, А где сказано, что реализация обязательно должна позволять создавать объекты занимающие всю память? Что мешает реализации ограничить размер любого объекта в байтах величиной 65535, но при этом использовать 64-битные указатели? – wololo Oct 21 '17 at 09:21
  • @wololo, вы можете делать в своих реализациях как вам нравится и возиться с этим как вам хочется. Я же для себя решаю, что равенство размеров этих типов удобно. – avp Oct 21 '17 at 10:12
  • @avp, Хм, ну да, пожалуй могу. И Вы можете для себя решать что угодно и возиться с этим как Вам хочется, однако, всё же стоит заметить, что стандарт языка не гарантирует, что размер указателя совпадает с размером типа size_t. – wololo Oct 21 '17 at 11:06
5

Тип size_t обычно применяется для счетчиков циклов, индексации массивов, хранения размеров, адресной арифметики. Так как его размер совпадает с размером указателя. Если для этих целей использовать (unsigned int ) то на 64х разрядной платформе могут быть проблемы с корректной работой приложения, а также теоретическое(на уровне одной - двух лишних инструкций) снижение производительности при индексации.

rgsv
  • 59